typescript 如何在redux中更新嵌套状态

jckbn6z7  于 2023-01-06  发布在  TypeScript
关注(0)|答案(1)|浏览(129)

我有点被redux卡住了。我想创建一个reducer,它可以用每个按钮中提供的数据更新onClick的状态。
这是我的TabSlice.ts

interface ITabContext {
    tabIndex: number,
    posterUrlFetch: string,
    tabData: {
        fetchUrl: string;
        title: string;
    }[]
}

const initialState = {
    tabIndex: 0,
    posterUrlFetch: 'movie/popular',
    tabData: [
        { fetchUrl: 'movie/popular', title: 'Trending' },
        { fetchUrl: 'movie/upcoming', title: 'Upcoming' },
        { fetchUrl: 'tv/popular', title: 'TV Series' },
    ]
}

const tabSlice = createSlice({
    name: 'tab',
    initialState: initialState as ITabContext,
    reducers: {
        changeTab(state, action: PayloadAction<ITab>) {
            const newItem = action.payload;
            return state = {
                tabIndex: newItem.tabIndex,
                posterUrlFetch: newItem.posterUrlFetch,
                tabData: [
                    { fetchUrl: newItem.posterUrlFetch, title: newItem.posterUrlFetch },

                ]
            }
        }
    }
})

然后我在组件中分派changeTab并创建函数onClick:

const click = () => dispatch(changeTab({
    tabIndex: 1,
    posterUrlFetch: 'movie/popular',
    tabData: [
      {
        fetchUrl: 'tv/latest',
        title: 'TV Latest'
      },
      {
        fetchUrl: 'movie/popular',
        title: 'Popular'
      },
      {
        fetchUrl: 'movie/latest',
        title: 'Latest'
      },
    ]
  }));

当我点击一些信息更新,但在tabData我只有第一个对象。如何使它推所有的数据到tabData,而不是只有第一个?谢谢!

vltsax25

vltsax251#

从reducer函数中删除return state = {},并将对象作为一个整体返回。

return {
    tabIndex: newItem.tabIndex,
    posterUrlFetch: newItem.posterUrlFetch,
    tabData: newItem.tabData,
  };

对于有效负载的tabData,可以传递newItem.tabData

相关问题