【发布时间】:2021-10-20 19:01:57
【问题描述】:
我在createSelector 和异步重击方面遇到了一些问题。
基本上,我正在尝试检索链接列表,并根据点击次数从最高到最低对它们进行排序。
这是我的简化代码。
MainPage.tsx
export const MainPage = (): JSX.Element => {
const dispatch = useDispatch();
const allLinks = useSelector(selectLinks);
useEffect(() => {
dispatch(getLinks());
}, [dispatch]);
return (
<div>
{allLinks.map((link) => ()} //unrelated logic
</div>
);
};
links.actions.ts
export const getLinks = createAsyncThunk(
"getLinks",
async () => {
const links = await axios.get"/links")
return links;
},
);
links.slice.ts
const linksSlice = createSlice({
name: "data",
initialState,
reducers: {},
extraReducers: (builder) => {
builder
.addCase(
getLinks.fulfilled,
(state, action) => {
state.links = action.payload;
},
);
},
});
links.selectors.ts
const selectLinksState = (state: RootState) => state.links;
export const selectLinks = createSelector(selectLinksState, (state) =>
state.links.sort((a, b) => b.clickCount - a.clickCount),
);
所以编译正常,但是当我在网络浏览器中打开它时,我收到以下错误Error: Invariant failed: A state mutation was detected between dispatches
有谁知道我做错了什么?我很确定这与选择器有关,因为如果我在操作中获取链接后直接对链接进行排序,它就可以正常工作。
【问题讨论】:
标签: reactjs redux redux-thunk redux-toolkit reselect