react赋值失败的问题

 const [pricelist, setPricelist] = useState([]);
//下面的实在一个方法里面实现
     let a = []
      for (let i = 0; i < params.data.priceList.length; i++) {
        a.push({
          index: i,
          base_price: params.data.priceList[i]["base_price"],
          max_floor: params.data.priceList[i]["max_floor"],
          min_floor: params.data.priceList[i]["min_floor"]
        })

      }
      console.log("a", a);
      setPricelist(JSON.parse(JSON.stringify(a)))
      console.log("pricelist1", pricelist);
      setPricelist(a)
      console.log("pricelist2", pricelist)

打印出来的情况如下:

img

pricelist1和 pricelist2都没有数据,赋值为什么会失败?

因为setState是异步的,你直接调用没那么快出来,可以尝试第二个参数:

setPricelist(JSON.parse(JSON.stringify(a)), () => {console.log("pricelist1", pricelist)})

回调函数将在状态更新后调用

useState 只能在函数组件的顶层作用域中使用,不能在循环、条件语句、嵌套函数等作用域中使用。

useEffect(()=>{
    
    //下面的实在一个方法里面实现
         let a = []
          for (let i = 0; i < params.data.priceList.length; i++) {
            a.push({
              index: i,
              base_price: params.data.priceList[i]["base_price"],
              max_floor: params.data.priceList[i]["max_floor"],
              min_floor: params.data.priceList[i]["min_floor"]
            })
     
          }
         
    console.log("a", a);
    setPricelist(JSON.parse(JSON.stringify(a)))
    console.log("pricelist1", pricelist);
    setPricelist(a)
    console.log("pricelist2", pricelist)
  })

你直接这样写 不会报错吗? 我这都直接报错 .需要写在 useffetc里

img