为什么代码触发“渲染太多”,为什么触发“未定义”?

时间:2020-07-03 05:50:15

标签: reactjs grid

我定义:

const result = await Promise.all(values.map(async x => doSomething(x)))

..

  const countryCode = "ca";

..

  const [countryKode, setCountryKode] = useState("")

..

 setCountryKode(countryCode)
 console.log(countryKode)  ???? Should it display the value????

为什么不识别“ countryKode”?

  return (
    <div className={classes.root}>
          <h1> Country Code: {countryKode}</h1> ?? says countryKode undefined..??

setCountryKode(countryCode)触发以下错误:为什么会这样?

错误:重新渲染次数过多。 React限制了渲染次数以防止无限循环。 感谢您的帮助,

2 个答案:

答案 0 :(得分:1)

您不应直接在功能组件内部使用setCountryKode,因为它将使您陷入infinitw循环中。您可以在效果内部使用它或在此功能组件内部执行任何功能。您可以按以下步骤进行初始化

const [countryKode, setCountryKode] = useState("ca")

并删除此行

  // setCountryKode(countryCode) ??? TOO MANY RENDERS ..

答案 1 :(得分:1)

渲染功能中的设置状态将导致另一个渲染触发。因此,在这种情况下,您的render将调用setCountryKode,这将调用render,将调用setCountryKode,这将调用render,依此类推-等等

为防止这种情况,您应该将countryKode中的countryKode初始设置为useState

const countryCode = "ca";
const [countryKode, setCountryKode] = useState(countryCode);

甚至:

const [countryCode, setCountryCode] = useState("ca");