建设公司网站的可行性研究,wordpress媒体库删除,asp网站路径,中国建设网站企业网上银行业务功能setState用法
基本使用
this.setState({message:message})函数式使用
this.setState((state,props){//可加入修改数据之前的一些数据处理逻辑return{message:message}
})可加入修改数据之前的一些数据处理逻辑React会自动把state,props作为参数传递进来
异…setState用法
基本使用
this.setState({message:message})函数式使用
this.setState((state,props){//可加入修改数据之前的一些数据处理逻辑return{message:message}
})可加入修改数据之前的一些数据处理逻辑React会自动把state,props作为参数传递进来
异步操作批处理
this.state{message:初始数据}
this.setState({message:修改后数据})
console.log(this.state.message) # 初始数据之所以会这样 是因为 设置值的时候 是异步操作 如果想获取修改后的数据可这样用 this.state{message:初始数据}
this.setState({message:修改后数据},(){console.log(this.state.message) # 修改后数据
})为什么设计为异步
设置为异步操作 可以显著提升性能 如果每次改变state 都会执行render函数 那么界面就重复渲染 效率是很低的异步将state改变加入队列当中 批量去调用render 那么render只会被调用一次 如果设置为同步 可能会出现 数据发生修改 但是render函数并未调用完成 那么传递给子组件的props依旧为原来的值就会造成state和props不同步的问题state和props不一致 在开发中很容易造成不可知问题
同步情况 React 18 之前 以下三种操作React并不会进行批量异步处理18之前 setTimeoutPromise原生 18之后 全部都会被加入react异步处理队列当中 进行批处理
强制同步更新 不进行批处理
import {flushSync} from react-domflushSync((){this.setState({message:new message})
})知识点
React中并没有实现类型Vue2中的Object.defineProperty和Vue3中的proxy的方式去监听数据的变化必须通过setState去告知React数据发生了变化setState是从Component中继承过来的