iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > 其他 >react有哪些方法改变state
  • 340
分享到

react有哪些方法改变state

Reactstate 2023-05-14 21:05:10 340人浏览 安东尼
摘要

本教程操作环境:windows10系统、React18.0.0版、Dell G3电脑。react有哪些方法改变state?在react中正确修改state一,在react中可以通过this.state.{属性}的方式直接获取state,但当

react有哪些方法改变state

教程操作环境:windows10系统、React18.0.0版、Dell G3电脑。

react有哪些方法改变state?

在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视频教程》

以上就是react有哪些方法改变state的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: react有哪些方法改变state

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • react有哪些方法改变state
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react有哪些方法改变state在react中正确修改state一,在react中可以通过this.state.{属性}的方式直接获取state,但当我...
    99+
    2023-05-14
    React state
  • react更新state方法有哪些
    本教程操作环境:Windows7系统、react17.0.1版、Dell G3电脑。react更新state方法有哪些react中父级props改变,更新子级state的多种方法子组件:class Children extends Comp...
    99+
    2022-11-22
    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有哪些遍历方法
    这篇文章主要讲解了“react有哪些遍历方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react有哪些遍历方法”吧! rea...
    99+
    2024-04-02
  • html改变标签字体的方法有哪些
    这篇文章主要介绍了html改变标签字体的方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。html改变标签字体的方法:1、使用font-family属性改变字体系列;2...
    99+
    2023-06-06
  • C#改变windows服务状态的方法有哪些
    本篇内容主要讲解“C#改变windows服务状态的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#改变windows服务状态的方法有哪些”吧!C#windows服务状态、启动和停止服...
    99+
    2023-06-18
  • 用CSS改变图片颜色的方法有哪些
    本文小编为大家详细介绍“用CSS改变图片颜色的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“用CSS改变图片颜色的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • React Hook之使用State Hook的方法
    目录等价的class示例Hook和函数组件Hook是什么?声明State变量读取State更新State小结提示:方括号有什么用?提示:使用多个state变量总结Hook 简介章节中...
    99+
    2024-04-02
  • react改变css样式的两种方法
    今天小编给大家分享的是react改变css样式的两种方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。react改变css样式的方法:1、动态添加class,代码如“handlesh...
    99+
    2023-07-04
  • react创建组件有哪些方法
    这篇文章主要介绍了react创建组件有哪些方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。函数式组件:(1)语法:function myConponent(pro...
    99+
    2023-06-14
  • React事件监听和State状态修改方式
    目录React事件监听和State状态修改React事件监听相关例子React事件监听和State状态修改 on*函数可直接使用,但只能使用在html标签上,自己创建的组件标签不可 ...
    99+
    2022-11-13
    React事件监听 State状态修改 React 监听事件
  • react context优化的方法有哪些
    本篇内容介绍了“react context优化的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言我们在使用reac...
    99+
    2023-07-04
  • React在组件中如何监听redux中state状态的改变
    目录在组件中监听redux中state状态的改变解决方式React和redux的状态处理在组件中监听redux中state状态的改变 解决方式 1、在组件中引入store 2、在co...
    99+
    2022-11-13
    React组件 监听state的改变 监听redux中state改变
  • 简化React Hook的方法有哪些
    这篇文章主要讲解了“简化React Hook的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“简化React Hook的方法有哪些”吧!1. 减少 ...
    99+
    2024-04-02
  • Ubuntu 16.04的改变有哪些
    这期内容当中小编将会给大家带来有关Ubuntu 16.04的改变有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Ubuntu 16.04 (代号Xenial Xerus,意为好客的非洲地松鼠)不久就将...
    99+
    2023-06-13
  • SQLite4设计改变有哪些
    这篇文章主要讲解了“SQLite4设计改变有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQLite4设计改变有哪些”吧!1.0 内容提要 ...
    99+
    2024-04-02
  • LinuxDeepin 9.12 RC有哪些改变
    本篇内容介绍了“LinuxDeepin 9.12 RC有哪些改变”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!较大变化 * 官方 Xfce ...
    99+
    2023-06-17
  • React代码拆分的方法有哪些
    本篇内容介绍了“React代码拆分的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!动态加载(import)es6提供import(...
    99+
    2023-07-05
  • react性能优化的方法有哪些
    1. 使用生命周期方法:React的生命周期方法可以帮助我们优化组件的性能。例如,使用shouldComponentUpdate方法...
    99+
    2023-09-13
    react
  • react渲染方式有哪些
    这篇文章主要为大家展示了“react渲染方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“react渲染方式有哪些”这篇文章吧。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作