如何将 useState 状态值传递给 useReducer 初始状态

时间:2021-03-02 00:22:49

标签: reactjs react-hooks

我想将一个值从 useState 状态值传递给 useReducer 初始状态。

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 值? 先谢谢了

2 个答案:

答案 0 :(得分:0)

const [item, setItem] = useState([]);

您使用空数组声明了您的状态,因此这就是filteredItem 显示的内容。如果您稍后设置了状态,为了在减速器中更改它,我认为您需要使用调度功能。

答案 1 :(得分:0)

您在这里尝试做的将不起作用。 reducer 的初始状态就是——INITIAL 状态。在您的 initialState 更新为获取结果之前,它将使用第一次渲染中的 items 值。对变量 initialState 的更改不会影响已经创建的 reducer。您必须执行 dispatch 操作才能将 items 存储在您的减速器中。