首页 > 解决方案 > 为什么我不能将函数的结果用作 useState 中的状态

问题描述

我尝试使用useState对象数组作为值。像这样的东西:

const [state, setState] = useState(arg)

Arg 是函数的结果,它返回如下数组:

[{a:1, b:2}, {a:3, b:4}]

但是当我尝试使用它时,我的状态是空的,什么也没有发生。如何使用 arg in useState?我看到另一个类似的问题,但这些解决方案不起作用。或者我不明白。

//take users list from DB
  const dispatch = useDispatch()
  const items = useSelector((state) => state.users.list)

  useEffect(() => {
    dispatch(funcThatGetUsersList)
  }, [dispatch])
  
//use items for handler
  const [list, setList] = useState([])
  
  function checkboxHandler = (event) => {
    do smth with setList(list)
   }

添加了一小段代码

标签: javascriptreact-hooksuse-state

解决方案


如果您使用惰性初始状态,则该函数将仅被评估一次。

如果它在后续渲染中返回不同的值,则其他值将被忽略。

const condition = false
const getArg = () => condition ? arg : []

useState(getArg) // getArg() will be called only once

推荐阅读