Задать вопрос
@Shiva6

Как возвращать сразу новое состояние из useState после изменения?

Приветствую всех, читающих этот вопрос!
Есть селектор, value которого работает как фильтр:
const { Option } = Select;
  const dispatch = useDispatch();
  const [filters, setFilters] = useState({status: null});

  <Select
      style={{ width: 100 }}
      placeholder="Статус"
      optionFilterProp="children"
      onChange={onChangeStatus}>
    <Option value="created">Создан</Option>
    <Option value="added">Добавлен</Option>
    <Option value="photo">Фотография продукта</Option>
  </Select>


При выборе одного из значений внутри селектора срабатывает событие, изменяющее состояние;
function onChangeStatus(value) {
    setFilters({ status: value})
    dispatch(getFilters(filters));
  }

Но дело в том, что в action приходит старое состояние {status: null}, никак не могу написать правильно асинхронность, чтобы успело поменяться состояние и лишь потом сработал dispatch. Переписывал функцию в вот такой вид, но в консоли ошибка.
function onChangeStatus (value) {
    setFilters({
      ...filters, status: value
    }, () => {
      dispatch(getFilters(filters));
    });
  }


Заранее благодарен за любую помощь!
  • Вопрос задан
  • 287 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@Guccigang
А почему бы не передавать в `getFilters` сразу { status: value }, к которому у нас есть доступ в функции?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
jumbastic
@jumbastic
...
onChange={value => setFilters({status: value})}>
...
useEffect(() => {
dispatch(getFilters(filters));
}, [filters])
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы