Rumah > Artikel > hujung hadapan web > Bagaimana untuk menukar keadaan komponen dalam tindak balas
Sebagai tindak balas, anda boleh menggunakan setState() untuk mengubah suai keadaan komponen. setState() ialah kaedah yang digunakan untuk mengemas kini keadaan komponen Kaedah ini boleh membuat baris gilir perubahan kepada keadaan komponen, dan juga boleh mendapatkan keadaan terkini Sintaksnya ialah "this.setState({sebahagian daripada data yang akan diubah suai })".
Persekitaran pengendalian tutorial ini: sistem Windows 7, versi react18, komputer Dell G3.
Definisi:
digunakan untuk menerangkan 某一时刻的形态
data perkara dalam , biasanya dipanggil keadaan. (Ia boleh difahami dengan mudah bahawa keadaan adalah data)
Contohnya: kuantiti inventori buku pada 23 September; >
boleh ditukar Selepas perubahan, paparan akan mempunyai perubahan yang sepadan (pengikatan data dua hala)
2 komponen statelessialah komponen stateful. Komponen tanpa status: komponen yang tidak boleh menentukan keadaan.
Komponen fungsi juga dipanggil 无状态组件
Pada 6 Februari 2019, React Hooks telah diperkenalkan dalam React 16.8, oleh itu Berfungsi komponen juga boleh menentukan keadaan mereka sendiri. [Cadangan berkaitan:
Tutorial video Redis, Pengajaran pengaturcaraan]Artikel ini menerangkan terutamanya status
komponen kelas3. Status komponen kelas
Gunakan
untuk memulakanstate = { }
import React from "react"; export default class Hello extends React.Component { // 这里的state就是状态 state = { list: [{ id: 1, name: "给我一个div" }], isLoading : true }; }2) Gunakan
render() { return ( <> <h1>姓名-{this.state.name}</h1> <ul> {this.state.list.map((item) => ( <li key={item.id}>{item.name}</li> ))} </ul> <div>{this.state.isLoading ? "正在加载" : "加载完成"}</div> </> ); }dalam paparan 2. Pengikatan acara
6a0c90f0d644f9cc41c34c5db4ca90650adaba3e89c641156828c5bef7bd8846
: Nama acara bertindak balas menggunakan penamaan kotak unta, seperti: onMouseEnter, onFocus, onClick... .
Contohimport React from 'react' import ReactDOM from 'react-dom' const title = <h1>react中的事件</h1> export default class Hello extends React.Component { fn() { console.log('mouseEnter事件') } render() { return ( <div onClick = { () => console.log('click事件') } onMouseEnte r = { this.fn } </div> ) } } const content = ( <div> {title} {<Hello />} </div> ) ReactDOM.render ( content , document.getElementById ('root') )Nota
:
tambah kurungan:
onClick={ this.fn( ) }
class App extends React.Component { // 组件状态 state = { msg: 'hello react' } // 事件处理函数 handleClick() { console.log(this) // 这里的this是 undefined } render() { console.log(this) // 这里的this是当前的组件实例 App return ( <div> <button onClick={this.handleClick}>点我</button> </div> ) } }Ini dalam kaedah render menunjuk kepada komponen tindak balas semasa.
undefined
untuk menentukan mod berjalan. Selagi kod anda ditulis dalam kelas atau modul, hanya mod ketat yang tersedia, jadi fungsi ini dalam kelas menghala ke tidak ditentukanclass
use strict
在事件处理程序外套一层箭头函数
Kelemahan: Perlu membalut fungsi anak panah tambahan di luar fungsi pemprosesan, struktur tidak cantik
Kelebihan :
Seperti yang dinyatakan sebelum ini, jangan tambah kurungan apabila memanggil fungsi pemprosesan dalam
, jika tidak, atur cara di dalam akan dilaksanakan serta-merta. Sekarang selepas membungkus lapisan fungsi anak panah di luar, anda bukan sahaja boleh menambah kurungan Tanda kurung juga boleh digunakan untuk menghantar parameter{this.handleClick ( )}
class App extends React.Component { state = { msg: 'hello react' } handleClick () { console.log(this.state.msg) } render () { return ( <div> <button onClick={ () => { this.handleClick ( ) }}>点我</button> </div> ) } }akan digunakan kemudian >
通过bind()方法改变函数this指向并不执行该函数的特性解决
class App extends React.Component { state = { msg: 'hello react' } handleClick () { console.log(this.state.msg) } render () { return ( <div> <button onClick={ this.handleClick.bind (this) }>点我</button> </div> ) } }
Kodnya ringkas, intuitif dan kaedah yang paling banyak digunakan在class中声明事件处理函数的时候直接使用箭头函数
class App extends React.Component { state = { msg: 'hello react' } handleClick = () => { console.log(this.state.msg) } render() { return ( <div> <button onClick={this.handleClick}>点我</button> </div> ) } }4 Ubah suai status komponen
tidak boleh diubah suai secara langsung Nilai dalam keadaan mengubah paparan ! keadaan komponen; setState() akan menukar keadaan komponen Berbaris dan memberitahu React bahawa komponen ini dan anak-anaknya perlu diberikan semula dengan keadaan dikemas kini.
语法:this.setState( { 要修改的部分数据 } )
这是继承自React.Component
的修改类组件状态的方法
state = { count: 0, list: [1, 2, 3], person: { name: 'jack', age: 18 } } // 【不推荐】直接修改当前值的操作: this.state.count++ ++this.state.count this.state.count += 1 this.state.count = 1 this.state.list.push(4) this.state.person.name = 'rose' // 【推荐】不是直接修改当前值,而是创建新值的操作: this.setState({ count: this.state.count + 1, list: [...this.state.list, 4], person: { ...this.state.person, // 要修改的属性,会覆盖原来的属性,这样,就可以达到修改对象中属性的目的了 name: 'rose' } })
setState
进行修改。由state的值来控制表单元素的值
示例代码:
class App extends React.Component { state = { msg: 'hello react' } handleChange = (e) => { this.setState({ msg: e.target.value }) } // value 绑定state 配合onChange事件双向绑定 render() { return ( <div> <input type="text" value={this.state.msg} onChange={this.handleChange}/> </div> ) } }
注意事项:
使用受控组件的方式处理表单元素后,状态的值就是表单元素的值。即:想要操作表单元素的值,只需要通过this.setState( { 要修改的部分数据 } )
操作对应的状态即可
示例代码:
import { createRef } from 'react' class Hello extends Component { txtRef = createRef() handleClick = () => { // 文本框对应的 DOM 元素 // console.log(this.txtRef.current) // 文本框的值: console.log(this.txtRef.current.value) } render() { return ( <div> <input ref={this.txtRef} /> <button onClick={handleClick}>获取文本框的值</button> </div> ) } }
(学习视频分享:编程基础视频)
Atas ialah kandungan terperinci Bagaimana untuk menukar keadaan komponen dalam tindak balas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!