【问题标题】:Mutating an array present in one .js file from another .js file in react-native从 react-native 中的另一个 .js 文件中改变一个 .js 文件中存在的数组
【发布时间】:2021-04-26 22:06:05
【问题描述】:

我将一个数组存储在一个 .js 文件中,因为我打算在许多其他文件中使用它。虽然我在其他文件中正确获取了它(通过渲染数组的项目进行检查),但我无法改变数组,因为我需要在数组中添加和删除项目。

这是我的数组所在的文件;

export default myArray = ['first thing', 'second thing', 'and so on'];

这就是我尝试过的;

首先我导入了它;

import myArray from 'path/of/the/file.js'

然后尝试对其进行变异;

myArray = [...myArray , andSomeOtherItem];

这显示一个错误;

myArray is read-only

搜索后,我认为这是 react-native 的默认行为。如果我是对的,那我该如何实现呢?

【问题讨论】:

  • 这不是突变!但这是myArray.push(andSomeOtherItem);myArray[myArray.length] = andSomeOtherItem;
  • 变异不是意味着改变数组吗??
  • mutate 意味着改变某些对象的(某些属性)。为局部变量 (或在您的情况下为常量) 分配新值不会更改对象。
  • 就我而言,当我执行 myArray.push(something) 时,这也不会更改数组,但也不会出现任何错误
  • 当然Array#push() 正在更改对象,它正在向数组中添加一个新项并增加其长度。

标签: javascript arrays reactjs react-native


【解决方案1】:

如果你想这样做,你可以尝试如下:

let myArray = require("./path/of/the/file.js");

myArray.default = [...myArray.default, "4"];

export default myArray.default;

这也会改变你在第一个文件中的旧数组

【讨论】:

  • 我认为你们不明白什么是突变。请阅读上面的cmets,我已经向OP解释过了。
  • 感谢您的回答。由于一些拼写错误,我花了一些时间来实现。
【解决方案2】:

那是因为它是只读的,myArray 只是返回给你的数据,你不能更新或修改它,

您可以做的就是将副本存储在新数组中

userArray = myArray
userArray = [...userArray, 1];

改变它的唯一方法是

export funciton myArrayfunction(val) {
myArray = ['first thing', 'second thing', 'and so on'];
 if(val) {
     myArray = [...myArray, val];
  }

  return myArray;
}

// then in your parent component

export default App() {
// pass the value you want to add in the array
 myArrayFunction(someOtherValue)

}


【讨论】:

  • 我知道我可以做到这一点,但我想知道是否有一些直接的方法可以改变它,或者换句话说,改变它的只读属性并使其可变。
  • 我认为你们不明白什么是突变。请阅读上面的cmets,我已经向OP解释了。
  • 按照第一种方式。
猜你喜欢
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 2020-07-17
相关资源
最近更新 更多