最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用react在修改state中的數(shù)組和對(duì)象數(shù)據(jù)的時(shí)候(setState)

 更新時(shí)間:2022年09月07日 14:33:07   作者:落落Plus  
這篇文章主要介紹了使用react在修改state中的數(shù)組和對(duì)象數(shù)據(jù)的時(shí)候(setState),具有很好的參考價(jià)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

react修改state的數(shù)組和對(duì)象數(shù)據(jù)的時(shí)候(setState)

首先在修改狀態(tài)數(shù)據(jù)(state)的時(shí)候,我們要遵循react的規(guī)則,使用setState()方法去修改

此時(shí)修改的數(shù)據(jù)是一個(gè)數(shù)組或者是一個(gè)對(duì)象的時(shí)候,setState中傳遞一個(gè)對(duì)象是不能夠滿足的,此時(shí)就需要給setState中傳遞函數(shù)了!

此時(shí)函數(shù)中的參數(shù)state就是我們組件中的state數(shù)據(jù),可以在方法中把參數(shù)中state改變后通過k:v return出來

handlerWorkType(item, index) {
  this.setState((state) => {
    for(let i = 0; i < state.submitWorksList.length; i++) {
      if(state.submitWorksList[i] == item.id) {
        state.submitWorksList.splice(i, 1)
        state.worksTypeList[index].activeShow = false
        return { 
          submitWorksList: state.submitWorksList,
          worksTypeList: state.worksTypeList
        }
      }
    }
    state.submitWorksList.push(item.id)
    state.worksTypeList[index].activeShow = true
    return { 
      submitWorksList: state.submitWorksList,
      worksTypeList: state.worksTypeList
    }
  })
}

需要注意

必須要在數(shù)據(jù)修改之后在通過k:v對(duì)return;

避免調(diào)用其它方法,將其它方法的返回值賦值給我們的變量;得不償失!

react修改數(shù)組對(duì)象的注意事項(xiàng)

react開發(fā)主張使用函數(shù)式編程,函數(shù)式編程有個(gè)重要的特性就是不可變性。 你無法更改數(shù)據(jù),也不能更改。 如果要改變或更改數(shù)據(jù),則必須復(fù)制數(shù)據(jù)副本來更改。

看個(gè)例子,就是Vue和React兩個(gè)框架實(shí)現(xiàn)給數(shù)組添加一個(gè)元素。

vue

export default {
?? ?name: "home",
?? ?data() {
?? ??? ?return {
?? ??? ??? ?testArr: ['蘋果','香蕉']
?? ??? ?};
? ? },
? ? created(){
? ? ? ? this.testArr.push('橘子')
? ? }
};
...

react

class App extends React.Component {
? ? constructor(props) {
? ? ? ? super(props);
? ? ? ? this.state = {
? ? ? ? ? ? testArr: ['蘋果','香蕉']
? ? ? ? };
? ? }
? ? componentDidMount(){
? ? ? ? this.setState({
? ? ? ? ? ? testArr:[...this.state.testArr,'橘子']
? ? ? ? })
? ? }
? ? render(){
? ? ? ? return (
? ? ? ? ? ? <React.Fragment>
? ? ? ? ? ? ? ? <p>{this.state.testArr}</p>
? ? ? ? ? ? </React.Fragment>
? ? ? ? )
? ? }
}

這里會(huì)發(fā)現(xiàn)兩個(gè)框架有個(gè)細(xì)微差別,Vue是直接修改的原數(shù)組,而React是不修改原數(shù)組,而是創(chuàng)建了一份新的數(shù)組,再通過setState賦值。剛接觸React的時(shí)候的確會(huì)覺得挺奇怪,感覺會(huì)無形增加代碼復(fù)雜度。接下來看下為何React要如此設(shè)計(jì)。

React遵循函數(shù)式編程規(guī)范。在函數(shù)式編程中,不推薦直接修改原始數(shù)據(jù)。 如果要改變或更改數(shù)據(jù),則必須復(fù)制數(shù)據(jù)副本來更改。所以,函數(shù)式編程中總是生成原始數(shù)據(jù)的轉(zhuǎn)換副本,而不是直接更改原始數(shù)據(jù)。

這里是一些常見的React修改數(shù)組或者對(duì)象的例子,所有這些函數(shù)都不改變現(xiàn)有的數(shù)據(jù),而是返回新的數(shù)組或?qū)ο蟆?/p>

刪除數(shù)組中的指定元素

//刪除testArr中的櫻桃
...
constructor(props) {
? ? super(props);
? ? this.state = {
? ? ? ? testArr: ['蘋果','香蕉','橘子','櫻桃','橙子']
? ? };
}
componentDidMount(){
? ? this.setState({
? ? ? ? testArr:this.state.testArr.filter(res=>res!=='櫻桃')
? ? })
}
...

合并兩個(gè)對(duì)象

...
constructor(props) {
? ? super(props);
? ? this.state = {
? ? ? ? testObj1:{
? ? ? ? ? ? chineseName:'橘子',
? ? ? ? ? ? englishName:'orange'
? ? ? ? },
? ? ? ? testObj2:{
? ? ? ? ? ? color:'yellow',
? ? ? ? ? ? shape:'circle'
? ? ? ? },
? ? ? ? testObj:{}
? ? };
}
componentDidMount() {
? ? this.setState({
? ? ? ? testObj: Object.assign(this.state.testObj1,this.state.testObj2)
? ? })
}
...

修改多層級(jí)對(duì)象的值

//testObj的apple的color改成green
...
constructor(props) {
? ? super(props);
? ? this.state = {
? ? ? ? testObj: {
? ? ? ? ? ? banner: {
? ? ? ? ? ? ? ? name: '香蕉',
? ? ? ? ? ? ? ? color: 'yellow'
? ? ? ? ? ? },
? ? ? ? ? ? apple: {
? ? ? ? ? ? ? ? name: '蘋果',
? ? ? ? ? ? ? ? color: 'red'
? ? ? ? ? ? }
? ? ? ? }
? ? };
}
componentDidMount() {
? ? this.setState({
? ? ? ? testObj: {
? ? ? ? ? ? ...this.state.testObj,
? ? ? ? ? ? apple:{
? ? ? ? ? ? ? ? ...this.state.testObj.apple,
? ? ? ? ? ? ? ? color:'green'
? ? ? ? ? ? }
? ? ? ? }
? ? })
}
...

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • react實(shí)現(xiàn)可播放的進(jìn)度條

    react實(shí)現(xiàn)可播放的進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)可播放的進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • React Native 集成jpush-react-native的示例代碼

    React Native 集成jpush-react-native的示例代碼

    這篇文章主要介紹了React Native 集成jpush-react-native的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • react-native聊天室|RN版聊天App仿微信實(shí)例|RN仿微信界面

    react-native聊天室|RN版聊天App仿微信實(shí)例|RN仿微信界面

    這篇文章主要介紹了react-native聊天室|RN版聊天App仿微信實(shí)例|RN仿微信界面,需要的朋友可以參考下
    2019-11-11
  • React跨路由組件動(dòng)畫實(shí)現(xiàn)

    React跨路由組件動(dòng)畫實(shí)現(xiàn)

    在 React 中路由之前的切換動(dòng)畫可以使用 react-transition-group 來實(shí)現(xiàn),但對(duì)于不同路由上的組件如何做到動(dòng)畫過渡是個(gè)很大的難題,目前社區(qū)中也沒有一個(gè)成熟的方案,本文給大家分享React跨路由組件動(dòng)畫實(shí)現(xiàn),感興趣的朋友一起看看吧
    2023-10-10
  • React中hook函數(shù)與useState及useEffect的使用

    React中hook函數(shù)與useState及useEffect的使用

    這篇文章主要介紹了React中hook函數(shù)與useState及useEffect的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • React源碼state計(jì)算流程和優(yōu)先級(jí)實(shí)例解析

    React源碼state計(jì)算流程和優(yōu)先級(jí)實(shí)例解析

    這篇文章主要為大家介紹了React源碼state計(jì)算流程和優(yōu)先級(jí)實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • React Router 用法詳細(xì)介紹

    React Router 用法詳細(xì)介紹

    React Router 是 React 中用于處理頁面導(dǎo)航和路由的工具,它使用 HTML5 History API 或 URL 的哈希部分進(jìn)行路由管理,本文介紹React Router 用法詳細(xì)講解,感興趣的朋友一起看看吧
    2025-01-01
  • 阿里低代碼框架lowcode-engine設(shè)置默認(rèn)容器詳解

    阿里低代碼框架lowcode-engine設(shè)置默認(rèn)容器詳解

    這篇文章主要為大家介紹了阿里低代碼框架lowcode-engine設(shè)置默認(rèn)容器詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 基于react封裝一個(gè)通用可編輯組件

    基于react封裝一個(gè)通用可編輯組件

    前段時(shí)間接到這樣一個(gè)需求,需要封裝一個(gè)組件實(shí)現(xiàn)可編輯,這個(gè)到底有多通用呢,就是需要在普通的文字展示包括表格,列表等等,所以本文將給大家介紹如何基于react封裝一個(gè)通用可編輯組件,需要的朋友可以參考下
    2024-02-02
  • React進(jìn)行路由變化監(jiān)聽的解決方案

    React進(jìn)行路由變化監(jiān)聽的解決方案

    在現(xiàn)代單頁應(yīng)用(SPA)中,路由管理是至關(guān)重要的一部分,它不僅決定了用戶如何在頁面間切換,還直接影響到整個(gè)應(yīng)用的性能和用戶體驗(yàn),這些看似不起眼的問題,往往會(huì)導(dǎo)致功能錯(cuò)亂和性能下降,本篇文章將深入探討在 React 中如何高效監(jiān)聽路由變化,需要的朋友可以參考下
    2025-01-01

最新評(píng)論

汝城县| 锦屏县| 手机| 乡宁县| 郑州市| 张北县| 麻城市| 县级市| 长宁区| 和政县| 武强县| 玛曲县| 浙江省| 常宁市| 天津市| 罗江县| 望都县| 阿坝县| 梁平县| 清徐县| 汶上县| 张家港市| 思茅市| 泰安市| 永丰县| 花垣县| 衡水市| 庄浪县| 侯马市| 寻甸| 大余县| 文水县| 和龙市| 兴海县| 响水县| 安溪县| 根河市| 古交市| 舞阳县| 吉水县| 逊克县|