首页IT科技status灯闪烁怎么办(state声明式)

status灯闪烁怎么办(state声明式)

时间2025-08-03 02:57:31分类IT科技浏览3924
导读:如何定义state...

如何定义state

在类组件 中              ,在constructor()中使用this.state={}来定义

在函数组件中                     ,自React(16.8)版本以后       ,使用useState()来定义              。

function B (props) { // 定义state声明式变量 let [num, setNum] = useState(1) }

如何使用state

在类组件中              ,使用this.state访问声明式变量                     。 在函数组件中                     ,直接访问useState的结果       。

如何修改state声明式变量

在类组件中       ,使用this.setState()方法来修改       。

class A extends Component { constructor (props) { super(props) // 调用Component的构造函数 // 定义state this.state = { num: 1 } } this.setState(state=>({num: state.num + 1}), ()=> {console.log( this.state.num)}) } }

在函数组件中       ,使用useState()返回值的第二个参数(set*)方法来修改                     。

function B (props) { // 定义state声明式变量 let [num, setNum] = useState(1) const add = () => { console.log(1--- num, num) // 如果这里是React(V17)中                     ,在合成事件中是异步的              ,如果在宏任务或 Promise.then()是同步的              。 // 如果这里是React(18)       ,无论在哪里都是异步的       。 // useState()给的这种set*方法                     ,是没有callback的                     。 // setNum(num + 1) setNum(num => num + 10) console.log(2--- num, num) } }

this.setStaate()的两种写法

this.setState({},callback)当我们修改state时              ,如果旧值与新值无关,建议使用这种写法              。 this.setState((state)=>{},callback)当我们修改state时                     ,如果旧值与新值有关                     ,建议使用这种写法。

this.setState()的异步性

在React(v17/v16)中,this.setState()在合成事件(事件              ,生命周期中)是异步的;在宏任务              、promise.then()中是同步的                     。

在React(v18)中                     ,无论this.setState()在哪里都是异步的       ,这种特性              ,被称之为“并发模式              ”                     。

this.setState()定为异步是为了性能优化。

this.setState()自动合并

在同一个函数域中                     ,多个this.setState()会自动合并       ,以减少没必要的diff运算(协调运算);自动合并的规则是一种浅合并              。

声明:本站所有文章       ,如无特殊说明或标注                     ,均为本站原创发布                     。任何个人或组织              ,在未征得本站同意时       ,禁止复制                     、盗用       、采集              、发布本站内容到任何网站                     、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益                     ,可联系我们进行处理              。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
python construct(python中如何使用@contextmanage?) win10免费升级win11方法(免费升级Win10需要注意啥? Win10免费升级的好处与误区分析)