【问题标题】:React-Hooks: State's Peculiar Behavior when working with arraysReact-Hooks:使用数组时状态的特殊行为
【发布时间】:2020-07-03 12:05:37
【问题描述】:

当使用不同的技术将状态设置为数组时,我在 react-native 中得到不同的结果(在 reactjs 中可能会相似)。 代码实际上更长,但这里是摘要版本。

代码,即不工作

const [a,seta] = useState([]);
useEffect(()=>{
    callfun();
})
function callfun(){
       var newArray = [];
        for(i=0;i<5;i++){
           newArray.push(<Text>{i}</Text>)
      }
      seta(newArray);            //LINE 10
}
return(
<View>{a}</View>         // LINE 13
);

上面的代码在渲染时只显示数组的第一个元素。


将第 10 行替换为

seta(newArray);

将第 13 行替换为

<View>{[...newArray]}</View>

上面的这段代码只渲染数组中的第一个元素。

工作代码

将第 10 行替换为

seta([newArray]);

将第 13 行替换为

<View>{i[0]}</View>

上面的这段代码给出了正确的结果并渲染了状态数组中的所有元素。


将第 10 行替换为

seta([...newArray]);

将第 13 行替换为

<View>{i}</View>

上面的这段代码给出了正确的结果并渲染了状态数组中的所有元素。

我的猜测

seta(arrayValue) 有一些问题。我找不到任何不起作用的原因。

【问题讨论】:

  • 你到底想做什么?我没有看到任何具体问题。
  • 我想知道react这种特殊行为背后的原因。

标签: javascript arrays reactjs react-native


【解决方案1】:

你需要使用map函数来显示所有元素

const [a,seta] = useState([]);
useEffect(()=>{
    callfun();
})
function callfun(){
       var newArray = [];
        for(i=0;i<5;i++){
           newArray.push(<Text key={i} >{i}</Text>)
      }
      seta(newArray);            //LINE 10
}
return(
<View>{a.map(el => el)}</View>         // LINE 13
);

【讨论】:

  • 我不确定我是否理解这一点。 a.map(el =&gt; el) 将返回类似于 a 本身的数组。这有什么区别?此外,可以通过在大括号中传递变量来呈现数组,如问题中的:{ a }.
  • 你说得对,我没注意。你试过&lt;Text key={i} &gt;{i}&lt;/Text&gt;
  • 是的,但问题是它为什么会产生这些结果。我能做到。
猜你喜欢
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
相关资源
最近更新 更多