反应原生如何将两个数组与函数合并

Posted

技术标签:

【中文标题】反应原生如何将两个数组与函数合并【英文标题】:react native how to merge two arrays with a function 【发布时间】:2019-02-07 13:14:03 【问题描述】:

我有两个函数,当我按下每个函数时,我创建了一个数组。

    this.state = 
            food:[],
            sports:[],
            interest:[],   
         

         _favoriteFood(foodState)
            const food = foodState
            this.setState(food:food)
            console.log(food)
            console.log(this.state.food)
          

         _favoriteSports(SportsState)
            const sports = SportsState
            this.setState(sports:sports)
            console.log(sports)
            console.log(this.state.sports)
          
render()


return (
<View>
      <FavoriteFood favoriteFood=this._favoriteFood/>
</View>
       <View>
             <FavoriteSports favoriteSports=this._favoriteSports/>
       </View>
)

例如,当我通过按下按钮调用方法时,我会得到像 food:[pizza, hodog]sports:[basketball, surfing] 这样的数组。

我的问题是当我尝试合并两个数组时:

const interest = [...this.state.food, ...this.state.sports]

它显示undefined 因为我想我在渲染发生之前调用它。

我应该用另一种方法来合并数组吗? 任何建议或 cmets 都会非常有帮助。在此先感谢:)

【问题讨论】:

何时何地调用合并这些状态的函数? 我编辑了我的文本。请看一下谢谢! 代码和问题很不一致。例如,您对单个变量使用 3(!) 个不同的名称:foodtoggle1toggle1Text @Finesse 我的错误。我编辑了代码。 不过,我看不出你在哪里做这个作业并使用它。 【参考方案1】:

你的问题可能会发生,因为当你调用 setState 时 React 不会立即改变状态,它可能会在稍后改变状态。如果要在 React 应用更改后访问状态,则应使用 setState 方法的第二个参数:

_favoriteFood(food)
  this.setState(food, () => 
    const interest = [...this.state.food, ...this.state.sports];
  );

Reference

另一种解决方案是使用您的方法参数,而不是从 this.state 读取相同的值:

_favoriteFood(food)
  this.setState(food);
  const interest = [...food, ...this.state.sports];

顺便说一句,您不应该在状态中存储const interest = [...this.state.food, ...this.state.sports],因为它可以从其他状态变量中派生出来。

【讨论】:

非常感谢,它运行良好。现在在控制台中我看到了合并的数组。 但是如何在 render() return() 中调用合并数组? @kirimi 里面render 这样:const interest = [...this.state.food, ...this.state.sports];render 方法必须能够呈现任何可能的组件状态,因此请创建一个 if 语句,当值未定义时呈现其他内容。 @kirimi 或者为状态项添加一个默认值。根据您的问题,this.state.foodthis.state.sports 都不能在任何时候未定义(如果给定方法的值)。【参考方案2】:

推入数组中的多项

合并两个数组

var subject1=['item1','item2']


var subject=['item3','item4','item5'];

subject1.push(...subject)

console.log(subject1);

//output

['item1', 'item2', 'item3', 'item4', 'item5']

【讨论】:

以上是关于反应原生如何将两个数组与函数合并的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应原生 mobx 中设置数组值?

如果可能的话,Java如何使用reduce函数将两个数组减少/合并为一个?

如何将两个有序数组合并为一个有序数组,用函数做,一个循环搞定?

我们如何在反应原生项目中将多个图像合并为单个图像

php下将多个数组合并成一个数组的方法与实例代码

如何在反应原生网格图像查看器中传递动态获取的图像数组数据,并在反应原生中使用标题