Почему я не могу использовать результат функции как состояние в useState - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь использовать useState с массивом объектов в качестве значения. Примерно так:

const [state, setState] = useState(arg)

Arg - это результат функции, которая возвращает массив, подобный следующему:

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

Но когда я пытаюсь использовать его, мое состояние пустое и ничего не происходит , Как использовать arg в 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)
   }

Добавлен небольшой кусочек кода

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Если вы используете Ленивое начальное состояние , функция будет оценена только один раз.

Если она возвращает другие значения в последующих рендерах, эти другие значения будут игнорироваться.

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

useState(getArg) // getArg() will be called only once
1 голос
/ 05 мая 2020

вы не можете использовать useState напрямую. Возможно, мое решение поможет. Я передал значение с помощью useEffect. такие как

useEffect(() => {
if (list)
  setList(yourFunc)
  )
}, [yourFunc])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...