返回顶部
首页 > 资讯 > 精选 >react怎么修改state
  • 878
分享到

react怎么修改state

2023-07-04 23:07:20 878人浏览 独家记忆
摘要

今天小编给大家分享一下React怎么修改state的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react改变state的方

今天小编给大家分享一下React怎么修改state的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

react改变state的方法有:1、通过“this.setState({title:'React'});”方法修改state;2、通过“this.setState((preState, props)=>counter:preState.quantity+1)”方法修改state;3、通过“replaceState”方法改变组件的状态。

在react中正确修改state

一,在react中可以通过this.state.{属性}的方式直接获取state,但当我们想要修改state的时候有许多的坑需要注意,以下 为三种常见的陷阱:

不能直接修改state。

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

this.state.title='React';

正确修改方式是:

this.setState({title:'React'});
state的更新是异步的

调用setState时,组件state并不会立即改变,而是把要修改的状态放入事件队列中,而react优化了真正的执行时机,并且出于本身性能原因,可能会将多次setState的状态修改合并成一次状态修改。因此不要依靠当前的state计算下一个state,因为当真正执行状态修改时,有时候依赖的this.state并不能保证是最新的state,因为react本身会把多次state合并成一次,这时this.state还是旧state,因此也不能依赖当前的props计算下一个状态,因为props的更新也是异步。如:对于react常用的列子中有一个点击加号数值增加一的操作,点击一次+,数量会加1,如果连续点击两次,还是会加1,这是在react合并修改为一次的情况下,相当与执行了如下代码:

Object.assign(
previousState,
{quantity:this.state.quantity+1},
{quantity:this.state.quantity+1},
)

于是后面覆盖前面的操作,最终数值只加1,此时可以使用另一个函数作为参数的setState,这个函数有两个参数,第一个参数是本次组件修改前的状态,第二个参数是当前最新的props。

正确修改方式是:

this.setState((preState, props)=>counter:preState.quantity+1)
state的更新是一个合并的过程

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

this.state={

title:'React',

content:'React is an wondeful js library'

}

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

this.setState({title:'ReactJs'});

react会合并最新的title到原来的状态,同时保留原来状态的content,最终合并state为:

this.state={
title:'ReactJs,
content:''React is an wondeful Js library
}

二,state与不可变对象

react官方把state当成不可变对象,一方面直接修改this.state,组件并不会重新render;另一方面,state中包含的所有状态都应该是不可变的对象,当state当中的某一个状态发生变化时,应该重新创建这个状态对象,而不是直接修改原来的state状态,那么当状态发生变化时,如何去创建新的状态呢,我们根据状态类型可以分为下面三种情况:

状态类型为不可变类型(number,string,bool,bull,undefined)

这种情况最简单,因为状态是不可变类型,所以直接给要修改的状态赋一个新值即可,列如下面我们要修改的count为number型,title(string),success(bool)三个状态:

this.setState({
count:1,
title:'React',
success:true
})
状态类型为数组

假如有一个数组类型的状态books,当想books中增加一本书时,既可使用数组的concat方法或者es6的扩展语法(apread syntax)

方法一:使用preState,concat创建新数组
 this.setState((preState)=>books:preState.books.concat(['React Guide']))
方法二:ES6 spread syntax
this.setState(preState=>books:[...preState,''React Guide])

当我们从books中截取部分元素作为新状态时,可以用数组的slice方法:

this.setState(preState=>books:preState.books.slice(1,3))

当从books中过滤部分元素后,作为新状态时,可以使用filter方法:

 this.setState(preState => {
       books: preState.books.filter(item => {

       return item != 'React';

       })
   })

注意:不要使用push,pop,shift,unshift,splice登方法修改数组类型的状态,因为这些方法都是在原数组的基础上修改的,而concat,slice,filter会返回一个新的数组。

方法三:状态的类型是普通对象(不包含:string,array)

使用es6的Object.assgin()方法

this.setState({

onwer:Object.assgin({},preState.onwer,{name:'Jason'});

})

使用对象扩展语法(Object spread properties):

this.setState(preState=>{
owner:{...preState.owner,name:'Jason'}
})

总结

创建新的状态的关键是,避免使用会直接修改原对象的方法而是使用可以返回一个新对象的方法,当然可以使用Immutable的JS库(Immutable.js)实现类似的效果。

思考:

为什么React推荐组件状态的修改时不可变对象呢?

  1. 不可变对象的修改会返回一个新的对象,不用担心原对象在不小心的情况下修改导致的错误,方便程序的管理和调试

  2. 处于性能的考虑,对象组件的状态是不可变对象时,在组件的shouldComponentUpdate方法中仅需要比较前后两次状态对象的引用就可以判断状态是否真的改变,从而避免不必要的render调用

三:除了以上方法修改react组件的状态之外,我们还经常会用到replaceState改变组件的状态

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
}

以上就是“react怎么修改state”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: react怎么修改state

本文链接: https://lsjlt.com/news/348052.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • react怎么修改state
    今天小编给大家分享一下react怎么修改state的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react改变state的方...
    99+
    2023-07-04
  • react怎么修改state中的数组
    要修改state中的数组,可以使用setState方法更新state的值。在React中,不应直接修改state中的值,而是应该创建...
    99+
    2023-09-13
    react
  • react dva如何更改state
    这篇文章主要介绍了react dva如何更改state,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 react...
    99+
    2024-04-02
  • react怎么更新state
    本文小编为大家详细介绍“react怎么更新state”,内容详细,步骤清晰,细节处理妥当,希望这篇“react怎么更新state”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。react更新state方法有:1、通...
    99+
    2023-07-04
  • React事件监听和State状态修改方式
    目录React事件监听和State状态修改React事件监听相关例子React事件监听和State状态修改 on*函数可直接使用,但只能使用在html标签上,自己创建的组件标签不可 ...
    99+
    2022-11-13
    React事件监听 State状态修改 React 监听事件
  • vue和react中props变化后如何修改state
    目录vue和react中props变化后修改state改进react改变state必须知道的知识点1.不能直接修改state2.state的更新是异步的3.state的更新是一个合并...
    99+
    2022-11-13
    vue中props react中props props修改state
  • react有哪些方法改变state
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react有哪些方法改变state在react中正确修改state一,在react中可以通过this.state.{属性}的方式直接获取state,但当我...
    99+
    2023-05-14
    React state
  • react怎么修改值
    本教程操作环境:Windows10系统、react18版、Dell G3电脑。react怎么修改值?react 组件点击修改值 state点击时改变标签上的值,但是在方法里是取不到this,那么首先要做的就是改变this class Leo...
    99+
    2023-05-14
    React
  • react 怎么修改端口
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react 怎么修改端口?React修改默认端口号问题我们在使用React的时候经常会遇到这种情况,3000端口号被占用。有时候可以关掉3000端口,但更...
    99+
    2023-05-14
    React
  • react refs怎么修改dom
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react refs怎么修改dom?React使用refs操作DOM方法详解在react框架 甚至说是三大框架中都是不太支持大家直接去操作dom的因为也没...
    99+
    2023-05-14
    dom React
  • VUEX-action能否修改state
    这篇文章给大家分享的是有关VUEX-action能否修改state的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先回顾下vuex,官网图如下Vuex 的 store 中的状态的...
    99+
    2024-04-02
  • react中state以及setState怎么用
    这篇文章主要介绍react中state以及setState怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在react中通过 state 以及 setState() 来控制组件的...
    99+
    2024-04-02
  • react 怎么动态修改style
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react 怎么动态修改style?关于React动态修改元素样式的三种方式React动态修改元素样式React动态修改元素样式常用的方式有两种:借助re...
    99+
    2023-05-14
    style React
  • react怎么修改属性值
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react怎么修改属性值?React修改数组对象中的某一个属性值一般我们会把Controller(控制器)里面的数据经过处理给到View(视图)层做显现,...
    99+
    2023-05-14
    React
  • react native怎么修改端口号
    本教程操作环境:Windows10系统、react-native0.68.0版、Dell G3电脑。react native怎么修改端口号?react native 端口号被占用,修改启动端口号前言本文基于 “react-native”: ...
    99+
    2023-05-14
    端口号 React Native
  • vuex中能直接修改state吗
    目录vuex中能直接修改state吗在vuex中,不经过mutations能直接修改state中的数据吗?为什么在vue中使用vuex,修改state的值vuex中能直接修改stat...
    99+
    2022-11-13
    vuex修改state vuex可直接修改state vuex修改state值
  • 使用react在修改state中的数组和对象数据的时候(setState)
    目录react修改state的数组和对象数据的时候(setState)需要注意react修改数组对象的注意事项删除数组中的指定元素合并两个对象修改多层级对象的值react修改stat...
    99+
    2024-04-02
  • react怎么修改对象的属性值
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react怎么修改对象的属性值?react 修改state为对象中的某一个属性值 使用对象的assign方法Object.assign方法用于对象的合并,...
    99+
    2023-05-14
    React
  • react如何修改值
    今天小编给大家分享一下react如何修改值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react修改值的方法:1、打开相应...
    99+
    2023-07-04
  • React三大属性之state有什么用
    这篇文章给大家分享的是有关React三大属性之state有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。React中很多地方需要用到数据,这在React中被叫做状态,我们需要一个专门管理状态的方法,于是st...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作