首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自CreateEntityAdapter的SetAll不使用react redux工具包设置状态

来自CreateEntityAdapter的SetAll不使用react redux工具包设置状态
EN

Stack Overflow用户
提问于 2020-09-07 23:06:32
回答 1查看 953关注 0票数 1

我正尝试在我的新网站中使用Redux Toolkit,但我在使用createEntityAdapter时遇到了问题。

我正在从我的数据库中获取一些数据,但是我的状态永远不会随着获取的数据而更新,我不知道为什么。

我的slice和fetch函数:

代码语言:javascript
复制
export const getTransports = createAsyncThunk('marketplace/transports/getTransports', async email => {
    const response = await axios.get(`${API_URL}/transport/published/company/${email}/notActive`);
    console.log('response', response);
    const data = await response.data;
    console.log('DATA', data);
    return data;
});

const transportsAdapter = createEntityAdapter({});

export const { selectAll: selectTransports, selectById: selectTransportById } = transportsAdapter.getSelectors(
    state => state.marketplace.transports
);

const transportsSlice = createSlice({
    name: 'marketplace/transports',
    initialState: transportsAdapter.getInitialState({
        searchText: ''
    }),
    reducers: {
        setTransportsSearchText: {
            reducer: (state, action) => {
                state.searchText = action.payload;
            },
            prepare: event => ({ payload: event.target.value || '' })
        },
        extraReducers: {
            [getTransports.fulfilled]: transportsAdapter.setAll
        }
    }
});

export const { setTransportsSearchText } = transportsSlice.actions;

export default transportsSlice.reducer;

数据获取工作正常,请求和de之间的状态看起来像是正常工作,但正如您在控制台中看到的,传输状态永远不会更新。

Redux Logger

我不明白为什么不能从transportsAdapter中使用setAll函数。正在检索的实体具有和id以及实体信息,因此它应该可以正常工作,但它不能。

我希望你能帮助我。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2021-04-03 21:43:31

Redux Essentials Tutorial之后,我也面临着同样的问题。

我通过指定函数setAll()的参数并使用构建器回调方法修复了这个问题。

代码语言:javascript
复制
const transportsSlice = createSlice({
    name: 'marketplace/transports',
    initialState: transportsAdapter.getInitialState({
        searchText: ''
    }),
    reducers: {
        setTransportsSearchText: {
            reducer: (state, action) => {
                state.searchText = action.payload;
            },
            prepare: event => ({ payload: event.target.value || '' })
        },
        extraReducers: (builder) => {
            builder.addCase(getTransports.fulfilled, (state, action) => {
              transportsAdapter.setAll(state, action.payload);
        });
    },
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63780156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档