#reactjs #react-hooks
#reactjs #реагирующие хуки
Вопрос:
Я хочу передать значение из значения состояния useState в useReducer initialstate.
const [item, setItem] = useState([]);
const initialState = {
menuOpen: true,
promoOpen: false,
couponOpen: false,
cartOpen: false,
orderOpen: false,
orderAmount: 1,
filteredItem: item,
};
const [state, dispatch] = useReducer(reducer, initialState);
const fetchUrl = async () => {
const resp = await fetch(url);
const respData = await resp.json();
const item = respData.item;
const category = respData.category;
const promo = respData.promo;
setItem(item);
setCategory(category);
setPromo(promo);
setFilterItem(item);
};
Но когда я это делаю console.log(state.filteredItem)
, я получаю пустой массив, поэтому я предполагаю, что он не передал значение в initialState . Есть ли у меня способ передать значение состояния useState в значение useReducer initialState?
Спасибо перед
Комментарии:
1. Я не понимаю, поведение, которое вы описали, правильное.
item
изначально является пустым массивом, что означаетfilteredItem
, что изначально является пустым массивом, поскольку вы это делаетеfilteredItem: item
. Поэтому, когда вы печатаете его черезconsole.log(state.filteredItem)
, он печатает пустой массив. Что вы ожидаете от его печати?2. извините, я забыл о своей выборке
Ответ №1:
То, что вы пытаетесь сделать здесь, не сработает. Начальное состояние редуктора — это просто НАЧАЛЬНОЕ состояние. Он будет использовать значение initialState
с самого первого рендеринга, прежде чем ваш items
будет обновлен результатами выборки. Изменения в переменной initialState
не повлияют на редуктор после того, как он уже был создан. Вам необходимо dispatch
выполнить действие для сохранения items
в вашем редукторе.
Ответ №2:
const [item, setItem] = useState([]);
Вы объявили свое состояние с помощью пустого массива, поэтому это то, что показывает filteredItem. Если вы установили свое состояние позже, чтобы изменить его в редукторе, я думаю, вам нужно использовать функцию диспетчеризации.
Комментарии:
1. извините, я забыл о своей выборке