【问题标题】:ReactJS: Updating each element of a state array, with a different valueReactJS:使用不同的值更新状态数组的每个元素
【发布时间】:2021-03-21 07:31:57
【问题描述】:

对于 React JS 中的以下情况,我需要一点帮助: 我的一个组件中有一个状态,它是一个由 3 个 json 对象组成的数组,如下所示:

 const [data, setData] = useState([ {name:'a'}, {name:'b'}, {name:'c'}]) 

而且我还有一个包含 3 个随机名称的数组:

const randomArray = ['d', 'e', 'f']

我想创建一个将randomArray 作为参数的方法,并将像这样更新新状态:

data = [ {name:'d'}, {name:'e'}, {name:'f'}]

有什么想法吗?

【问题讨论】:

    标签: reactjs state


    【解决方案1】:

    您可以使用地图功能。它从回调函数返回一个新数组。您可以像这样返回 name 属性;

    import { useEffect, useState } from "react";
    
    export default function App() {
      const [data, setData] = useState([
        { name: "a" },
        { name: "b" },
        { name: "c" }
      ]);
      const randomArray = ["d", "e", "f"];
    
      const setNewValues = () => {
        setData(randomArray.map(name=> ({ name})));
      };
    
      useEffect(() => {
        console.log(data);
      }, [data]);
      return (
        <div className="App">
          <button onClick={setNewValues}>Set Data </button>
        </div>
      );
    }
    

    【讨论】:

    • 非常感谢 :) 如果我的初始状态而不是每个 json 的一个属性 [{ name: 'a' }, etc.] ,每个 json 有两个属性(例如 [{name:'a ', number:4}, {name:'b', number:3}, {name:'c', number:2}] ),那么解决方案是什么?在这个例子中,我想要的最终状态是这样的: data = [ {name:'d' , number:4 } , {name:'e', number:3} , {name:'f', number: 2}]
    • 然后你会像这样从 map 中完全声明回调函数; setData(randomArray.map((item,index)=&gt; { return { name:item.name, number:item.number } }));
    【解决方案2】:

    这是您可以做到的一种方式。

    const ArrChange = () => {
     const randomArray = ['d', 'e', 'f'];
     const [data, setData] = useState([ {name:'a'}, {name:'b'}, {name:'c'}]) 
     const setData = () => {
       for(let i = 0; i < randomArray.lenght; i++)
          d[i].name = randomArray[i];
     }
    
     <Button onClick={setData}>
              Update
          </Button>
     }
    

    【讨论】:

    • 您正在重新定义钩子返回的函数。不要那样做。
    • @Janez 请更正我的代码赞赏(y)
    【解决方案3】:

    给你! :)

    const convertToJSON = array => {
      setData(array.map(name => ({ name })));
    };
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 2018-06-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2022-01-23
    • 2015-11-21
    相关资源
    最近更新 更多