2016-08-18 11 views
0

私は私の状態に値を送信し、2回目のクリックでの状態からそれを削除する必要がありonClickイベントとボタンがあります。onClickイベントの後にpropで属性を設定するにはどうすればよいですか?

<button 
type="button" 
value={posts.index} 
onClick={this.props.data ? this.props.remove : this.props.add} 
key={cont._id} 
data={-1} 
> 

私の問題は、私は1にデータ属性を設定する方法を知らないということです最初のクリックの後に2回目のクリックで削除機能が起動します。どのように達成するのですか?

export function add(e) { 
     return{ 
     type: ADD, 
     payload: e.target.value 
     } 

} 

答えて

1

あなたはdata属性が含まれているしたい値が含まれています。

まず、親コンポーネントでdatastateプロパティとして定義されていることを確認して、親とボタンの両方に影響を与えるように操作できるようにします。 (まだ親に)thisスコープこれら行わ付き

constructor(props, context) { 
    this.add = this.add.bind(this) 
    this.remove = this.remove.bind(this) 
} 

に、

add() { 
    this.setState({data: this.state.data + 1}); 
} 

remove() { 
    this.setState({data: this.state.data - 1}); 
} 

そしてもちろんのコンストラクタバインドを、:

次に、見えるようにadd()remove()関数を定義次のようにボタンを定義できます。

<button 
    type="button" 
    value={posts.index} 
    onClick={this.props.data ? this.props.remove : this.props.add} 
    key={cont._id} 
    data={this.props.data} > 

DOMの変化がデータによって引き起こされることを最も強く信じています。この設定では、add()またはremove()コールバックを呼び出すことによって親データ属性に変更を加えるたびに、ボタンが再描画されて新しいデータ値が反映されます。

2

アクションの作成者は、リターンの前に値を設定します。私は小道具でdata属性を想定してい

render() { 
    const buttonAction = this.props.data ? this.props.remove : this.props.add 
    return ( 
    <button 
     type="button" 
     value={posts.index} 
     onClick={buttonAction} 
     key={cont._id} 
     data={this.props.data}> 
    ) 
} 
+0

申し訳ありませんが、私はどこでデータ属性を1に設定していますか? –

+0

私はそれらが追加機能と削除機能にあると推測しました。 –

+0

それにも問題があります。自分のアクションクリエイターを投稿に追加しています。この遅い時間に私が思いつくことができる唯一の方法は州を通ることですが、もっと簡単な解決方法はないと思いますか? –

関連する問題