微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在地图中反应 setState

如何解决在地图中反应 setState

我正在尝试将从我的数据库获取的数据转换为状态~ 但它只捕获了我数据库中的最后一个数据。我想我没有正确使用反应钩子,它一直覆盖以前的状态,所以现在导致问题。我尝试了很多方法,但仍然无效。希望能在这里QQ找人帮我

这是我的代码

const [dataSource,setDataSource] = React.useState([]);
React.useEffect(() => {
    orders.map((data,i) =>
      setDataSource([
        ...dataSource,{
          key: i,id: helpers.leftPad(data.oid,6,0),name: data.cname,totalPrice: data.total_price === null ? 'No data' : data.total_price,orderDate: data.order_date,},])
    );
  },[]);

订单是来自后端的数据,看起来像

[...
...
744: {oid: 749,cid: 545,cname: "Jerry",order_date: "2018-09-04",…}
745: {oid: 750,cid: 546,cname: "Kevin",order_date: "2018-09-18",…}
...
...]

谢谢你们,这对我很有帮助!!

解决方法

您也可以执行此操作。

const [dataSource,setDataSource] = React.useState();
React.useEffect(() => {
    let ordersData = orders.map((data,i) =>
      retunr  {
          key: i,id: helpers.leftPad(data.oid,6,0),name: data.cname,totalPrice: data.total_price === null ? 'No data' : data.total_price,orderDate: data.order_date,},);
    setDataSource(ordersData)

  },[]);
,

在使用spread操作符的时候,我相信你使用了一个回调函数来获取现有的状态,像这样:

const [data,setData] = useState([]);
const newData = {message: "I am new data."};
setData((existingData) => [...existingData,newData]);

试试这个:

setDataSource((existingOrders) => [
    ...existingOrders,{
      key: i,])
,

如果您以这种形式使用 useState,那么您就可以访问您的状态的 prevState,并且您可以设置对象。

const [dataSource,setDataSource] = React.useState([]);
React.useEffect(() => {
    orders.map((data,i) =>
      setDataSource((prevState) => ([
        ...prevState,{
          key: i,]))
    );
  },[]);

或者你可以使用 Array.push 方法

const [dataSource,setDataSource] = React.useState([]);
React.useEffect(() => {
    let data = []
    orders.map((data,i) =>
      data.push(
        {
          key: i,}
    ));

  setDataSource(data)   
  },[]);
,

每次映射订单时,您的状态都会改变。最好定义一个数组并将项目推送到它。之后改变一次状态:

  const [dataSource,setDataSource] = React.useState([]);
  React.useEffect(() => {
    let array = [];
    orders.map((data,i) =>
      array.push(
        {
          key: i,})             
    );
    setDataSource(array)
    },[]);
,

您已经猜对了,您正在覆盖之前的状态。这是因为,您在 map 方法中使用了“setDataSource([])”。每次映射“数据”aaray 时,您都在使用“setDataSource([])”,因此您最终将“data”数组中的最后一个值设置为您的状态。 使用您的 map 函数创建一个新的所需数组,其中包含所有订单并在此设置状态之后。 它会是这样的。

const [dataSource,setDataSource] = React.useState([]);
    React.useEffect(() => {
        const newStateArray = [];
        orders.map((data,i) =>
            newStateArray.push({
            key: i,});

        );
        setDataSource(newStateArray);
  
     },[]);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?