2016-11-01 14 views
3

私は、反応コンポーネントのブール状態を切り替える方法を知りたいと思います。例えば:反応成分のブール状態をトグルする方法は?

:this.setStateメソッドを使用して、私は私のチェックボックスがクリックされるたびに状態を切り替えしようとしています

constructor(props, context) { 
    super(props, context); 

    this.state = { 
     check: false 
    }; 
}; 

私は私のコンポーネントのコンストラクタのboolean状態チェックを持っています

<label><input type=checkbox" value="check" onChange = {(e) => this.setState({check: !check.value})}/> Checkbox </label> 

もちろん、私はを取得します。未知のReferenceError:チェックは定義されていません。 これをどのように達成できますか?

事前に感謝します。

+0

を参照してください。おそらく 'this.state.check'を' this.setState({check:!check.value}) 'に書くことを意図していました。コンポーネントの状態に応じて変更されるチェックボックスのチェックプロパティを追加します。 'checked = {this.state.checked}' –

答えて

6

あなたはここにthis.state.checkの代わりcheck.valueを使用する必要があります。

this.setState({check: !this.state.check}) 

をしかし、いずれにせよ、このようにそれを行うには悪い習慣です。それを別のメソッドに移動して、マークアップに直接コールバックを書き込まないほうがはるかに優れています。

+0

Upvoted、しかし好奇心を払わない - なぜこの「悪い習慣」ですか? –

+0

ビューとロジックを分離する方が良いです。これは、ロジックとマークアップを個別に、より簡単に表示および更新できるためです。 –

+0

ReduxとReact Semantic UIの標準的な方法のようです – carkod

0

試してみてください。

<label><input type=checkbox" value="check" onChange = {(e) => this.setState({check: !this.state.check.value})}/> Checkbox </label> 

check: !check.valueを使用するには、それはあなたが宣言されていないcheckオブジェクト、探していることを意味します。

逆の値this.state.checkを指定する必要があります。

3

checkedを使用して値を取得します。 onChangeの間は、checkedtrueとなり、タイプはbooleanとなります。

希望すると便利です。

class A extends React.Component { 
 
    constructor() { 
 
    super() 
 
    this.handleCheckBox = this.handleCheckBox.bind(this) 
 
    this.state = { 
 
     checked: false 
 
    } 
 
    } 
 
    
 
    handleCheckBox(e) { 
 
    this.setState({ 
 
     checked: e.target.checked 
 
    }) 
 
    } 
 
    
 
    render(){ 
 
    return <input type="checkbox" onChange={this.handleCheckBox} checked={this.state.checked} /> 
 
    } 
 
} 
 

 
ReactDOM.render(<A/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="app"></div>

10

誰もがこの投稿をしないので、私は正しい答えを掲示しています。新しい状態の更新が以前の状態に依存する場合は、常に、新しい状態を返す関数を引数として受け取る関数形式setStateを使用します。あなたのケースでは

this.setState(prevState => ({ 
    check: !prevState.check 
})); 

は、それはチェックが定義されていない、それが言うようにまさにdocs

関連する問題