反応して状態を変更するメソッドは次のとおりです: 1. 「this.setState({title:'React'});」メソッドを通じて状態を変更します; 2. 「this.setState((preState, props) を通じて」 => ;counter:preState.quantity 1)" メソッドで状態を変更します。 3. "replaceState" メソッドでコンポーネントの状態を変更します。
このチュートリアルの動作環境: Windows 10 システム、react18.0.0 バージョン、Dell G3 コンピューター。
react で状態を変更する方法は何ですか?
react で状態を正しく変更する
状態を直接変更することはできません。コンポーネントは状態を直接変更し、レンダリングを再トリガーしません。例:
this.state.title='React';
this.setState({title:'React'});
状態の更新は非同期ですsetState が呼び出されると、コンポーネントの状態は次のようになります。すぐには更新されませんが、変更される状態をイベント キューに入れ、react は実際の実行タイミングを最適化します。また、独自のパフォーマンス上の理由から、複数の setState 状態変更が 1 つの状態変更にマージされる場合があります。したがって、現在の状態に依存して次の状態を計算しないでください。状態の変更が実際に実行されるとき、依存する this.state が最新の状態であることが保証されない場合があります。反応自体が複数の状態を 1 つにマージするためです。状態はまだ古い状態のままであるため、プロパティの更新も非同期であるため、現在のプロパティに依存して次の状態を計算することはできません。例えば、よく使われるreactの例では、プラス記号をクリックして値を1つ増やす操作があり、1回クリックすると数値が1増加し、2回連続でクリックすると数値が増加します。これは、react がマージされ、one に変更されるときです。これは、次のコードを実行するのと同じです:
Object.assign( previousState, {quantity:this.state.quantity+1}, {quantity:this.state.quantity+1}, )
this.setState((preState, props)=>counter:preState.quantity+1)
状態の更新はマージ プロセスですコンポーネントを変更するために ssetState を呼び出すときコンポーネントの状態の更新はマージプロセスであるため、状態に入るときは、完全な状態ではなく、変更された状態だけを渡す必要があります。たとえば、コンポーネントの状態は次のようになります:
this.state={ title:'React', content:'React is an wondeful JS library' }
this.setState({title:'ReactJs'});
this.state={ title:'ReactJs, content:''React is an wondeful Js library }
状態のタイプは不変型です。 (数値、文字列、ブール、ブル、未定義)状態が不変型であるため、この状況は最も単純で、変更する状態に新しい値を割り当てるだけです。 、変更したいカウントは数値です。タイプ、タイトル (文字列)、成功 (ブール値) の 3 つの状態:
this.setState({ count:1, title:'React', success:true })
ステータスのタイプは次のとおりです。配列ステートブックの配列型がある場合、ブックにブックを追加したい場合は、配列の concat メソッドまたは es6 の拡張構文 (apread 構文) を使用できます。 方法 1: preState、concat を使用して新しい配列を作成する
this.setState((preState)=>books:preState.books.concat(['React Guide']))
this.setState(preState=>books:[...preState,''React Guide])
this.setState(preState=>books:preState.books.slice(1,3))
this.setState(preState => { books: preState.books.filter(item => { return item != 'React'; }) })
this.setState({ onwer:Object.assgin({},preState.onwer,{name:'Jason'}); })
this.setState(preState=>{ owner:{...preState.owner,name:'Jason'} })
总结:
创建新的状态的关键是,避免使用会直接修改原对象的方法而是使用可以返回一个新对象的方法,当然可以使用Immutable的JS库(Immutable.js)实现类似的效果。
思考:
为什么React推荐组件状态的修改时不可变对象呢?
replaceState()方法与setState()类似,但是方法只会保留nextState中状态,原state不在nextState中的状态都会被删除。使用语法:
replaceState(object nextState,[, function callback])
nextState,将要设置的新状态,该状态会替换当前的state。
callback,可选参数,回调函数。该函数会在replaceState设置成功,且组件重新渲染后调用。
如:
class App extends React.Component{ constructor(props); this.state={ count:1 title:'数字计算' } } handleClick=()=>{ this.replaceState({ count:this.state.count+1 }) } render(){ return( <button onClick={this.onClick}>点我</button> ) } }
结果为:
{ count:1 }
以上が状態の変更に反応するメソッドは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。