React之正确修改state

作者&投稿:洪皇 (若有异议请与网页底部的电邮联系)
~ state可以通过this.state.{属性}的方式直接获得,但当修改state时,往往有很多陷阱需要注意。下面介绍常见的三种陷阱。

直接修改state,组件并不会重新触发render,例如:

正确的修改方式是使用setSate();

很多开发刚开始没有注意到 setState 是异步的。如果你修改一些 state ,然后直接查看它,你会看到之前的 state 。这是 setState 中最容易出错的地方,如:

另外,需要注意的是props的更新也是异步的。
如果需要在 setState 后直接获取修改后的值,可以使用回调函数,setState 方法接收一个 function 作为回调函数。这个回调函数会在 setState 完成以后直接调用,这样就可以获取最新的 state 。如:

当调用setState修改组件状态时,只需要传入发生改变的state,而不是组件完整的state,因为组件state的更新是一个合并的过程。例如,一个组件的状态为:

当只需要修改title时,将修改后的title传给setState即可:

React会合并新的title到原来的组件状态中,同时保留原来的状态content,合并后的state为:


定制修改组件库的几种方式
下面我基于 antd 的 Modal 组件的二次封装,整个项目都改用封装后的 Modal 组件。之前遇到一个需要需要将表格多选功能改为 鼠标 hover 的时候显示 checkbox 而非 hover 情况下显示为数字序号 。这个需求在我们用到的 ali-react-table 中并没有相关 API 实现。 既然无法实现需求,就放弃用这个库吗...

React状态管理:react-redux和redux-saga(适合由vue转到react的同学)
react-redux有三个重要概念,分别是:store,action,reducer。 1.store。store就是存储全局数据状态的仓库。像这样:需要注意的是,state是 只读的 ,意味着我们不能 initState.xxx1 = "233" 这样去修改store里的数据。 其实,工作的项目里,仓库并不是放在store.js里,store.js里一般是做一些...

02-react随记-在yarn build打包后,打开网页显示为空白的解决方案_百 ...
创建react项目 构建完这个初始的项目之后,发现项目是可以正常访问的!接着就是发布上线 控制台中显示 打开build文件中index.html文件,在浏览器中看到一片空白,打开调试,发现报错了 可以通过修改package.json文件的homepage属性来修改,我们打开项目根目录下的package.json,发现没有homepage这个属性,这个时候就...

React的key
当元素的id没有确定时候,万不得已你可以使用元素索引 index 作为 key。这个策略在元素不进行重新排序时比较合适,如果有顺序修改,会导致性能变差,还可能引起组件状态的问题。如果你选择不指定显式的 key 值,那么 React 将默认使用索引用作为列表项目的 key 值。当基于下标的组件进行重新排序时,组件 ...

react-native 怎么设置字体
1 打开eclipse,找到window 2 点击后在下拉菜单中找到preferences 3 在左边的菜单栏中找到general,appearance在general展开后的第一行,点击展开appearance 4 找到colors and fonts,点击这样就快找到我们要的了 5 看到右边字体一列有很多的选项,我们只需要修改basic里面的 6 点击展开Basic,最下面有 Text ...

如何配置React Native真机调试
修改URL地址:打开项目目录下的AppDelegate.m文件,修改里面的URL,把localhost改为你的电脑的IP。在Mac系统下,你可以在系统设置\/网络里找到电脑的IP地址。选择设备:把手机插上数据线,连接到你的电脑,这时候就可以在调试设备里,看到你自己的设备。点击当前选中的模拟设备即可展示所有设备,如下图,然后...

React配置代理
如果配置成这样,启动react项目访问就会有如下的错误:经过查看源码发现:这里好像只能使用createProxyMiddleware,于是配置修改如下:重启项目,问题得到解决!经过上述的一步步调试,终于跨域问题得到解决,心累。。。 在配置代理的过程中,发生拒绝连接请求,我一直以为setupProxy.js与我项目中的config-...

react生命周期
三、react组件经历总体阶段 1、mounted阶段  加载阶段  或者说初始化阶段  这个阶段组件由jsx转换成真实dom 2、update阶段 组件运行中阶段 或者更新阶段  当组件修改自身状态,或者父组件修改子组件属性的时候发生的阶段 3、umount阶段  组件卸载阶段  这个一般是组件...

react复用组件时怎么处理数据冲突的
在React中,当复用组件时可能会出现数据冲突的情况,即多个组件共享同一份数据,而对该数据的修改可能会相互影响。为了解决这个问题,可以采取以下几种方法:使用props传递数据:通过将数据作为props传递给组件,确保每个组件都有自己的独立数据副本。这样每个组件可以独立地修改和管理自己的数据,避免了数据冲突...

如何修改ant design部分组件的样式
一、去除Antd的Button组件两个汉字中间的空格 二、去掉input聚焦时的蓝色边框 三、去掉点击button时的动画 四、替换搜索框的icon 五、修改树形控件选中项的背景色 六、解决react里input输入时显示[object Object]七、ant design的气泡卡片组件Popover的弹窗里设置输入框 从content属性入手,content属性值设置...

福泉市17844422180: react子组件怎么改变父组件的state -
智厘普利: 可以通过向子组件传入一个修改state的函数,比如如下代码:父组件:class Father extends Component { construtor(props){ super(props); this.state={ name: 'Peter', age: '26' } } onChangeState(stateName){ this.setState(stateName) } render()...

福泉市17844422180: React怎么修改state数组中的数据 -
智厘普利: 我用reactjs生成了html之后,怎么去重新更新这些html呢? 使用this.setState()方法重新设置state是可以 但是如果我要在外部,比如点击某个按钮来更新,而这个按钮不是用reactjs生成的

福泉市17844422180: react state直接赋值可以改变吗 -
智厘普利: 可以直接使用react的immutability helpers var update = require('react-addons-update'); var newdata = update(this.state, {c: {d: {1: {e: {$set: 3}}}}}); this.setstate(newdata)

福泉市17844422180: react this.setstate和this.state的区别 -
智厘普利: this.state通常是用来初始化state的,this.setstate是用来修改state值的.如果你初始化了state之后再使用this.state,之前的state会被覆盖掉,如果使用this.setState,只会替换掉相应的state值

福泉市17844422180: react.js 怎么更改input的value值 -
智厘普利: 在react中是无法直接更改from表单元素的值的,必须通过setState()去响应用户的输入.例如想要更改input的value,则需要监听onChange()事件,然后通过event.target.value来获取用户的输入,再通过设置一个名为value的state,来告诉react重新渲染. onChange(event) {this.setState({value: event.target.value}); } <input value={this.state.value} onChange={this.onChange}/>

福泉市17844422180: 如何测试react中的this.state -
智厘普利: state表示react组件内部的一种状态,通过组件内的getInitialState函数,可以为组件的初始状态赋值,当组件的状态发生改变时,组件会重新渲染.官方对state的说明如下:组件其实是状态机(State Machines) React 把用户界面当作...

福泉市17844422180: reactnative setstate 怎么重新渲染页面 -
智厘普利: 如果直接操作的state对象需要调用forceUpdate方法 如果用setState 就会自动重新渲染的

福泉市17844422180: 如何管理react 的 state -
智厘普利: 关于react和redux技术流的搭建,欢迎看我写的mini-react-redux项目. 用仅仅50行代码,搭建react、redux的完整项目,具备所有功能.项目地址:GitHub - slashhuang/mini-react-redux: 极小型的react+redux的项目搭建,共50行代码 ...

福泉市17844422180: react es6 怎么设置默认的props 于 state -
智厘普利: state在constructor方法里写...constructor(props) { this.state = { n: ... } } 写default props有两种方法//1 在组件内部的使用static...static defaultProps = { name: ...}//2 在组件外部 Hello.defaultProps = { name: ...}

福泉市17844422180: redux中state数据变动后怎么强制刷新 -
智厘普利: state状态改变是会自动渲染整个store的,不需要强制刷新,比如某个state原来为false,然后变成了true,那么就会刷新了,如果不刷新,检查一下是不是state没有修改成功

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网