@Dudarik

Как правильно работать с контекстом в react?

Здравствуйте!
Пытаюсь разобраться с контекстом в React. Собственно ссылка на приложение https://codesandbox.io/s/affectionate-feistel-yxsnkd
Имеется стейт(два поля: 1. массив 2. переменная === случайному числу из этого массива), у каждого поля свой редюсер. По моей логике, два последовательно вызванных "диспатча" должны отработать друг за другом.
dispatch({type: REMOVE_ITEM, payload: state.rndNum });
dispatch({type: SET_RND_NUM, payload: state.arr[getRndVal(0, state.arr.length - 1)]});

Вначале удаляем элемент из массива, затем выбираем новый. Но получается так, что, иногда, выбор случайного элемента массива, происходит до удаления элемента из массива и он выбирает только что удаленный элемент. Как правильно реализовать такую логику?
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F Куратор тега React
Вначале удаляем элемент из массива, затем выбираем новый. Но получается так, что, иногда, выбор случайного элемента массива, происходит до удаления элемента из массива и он выбирает только что удаленный элемент.

Не "удаляем" - создаётся новый массив, в котором может оказаться (а может и нет) на один элемент меньше. Не "иногда" - всегда выбор нового случайного элемента осуществляется из старого массива.

Как правильно реализовать такую логику?

Надо выбирать новый случайный элемент из нового массива, а не из старого. Переносим соответствующий вызов dispatch из обработчика клика в эффект:

useEffect(() => {
  dispatch({
    type: SET_RND_NUM,
    payload: state.arr[Math.random() * state.arr.length | 0],
  });
}, [ state.arr ]);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы