我对 Redujx-toolkit 有疑问
I have a problems with Redujx-toolkit
当我使用来自 react-redux 的 useSelector Hook 时,有时我会收到一条错误消息:“useSyncExternalStore 不是一个函数”。我试图搜索 google 来解决问题,但我没有找到任何东西。
这是我在 stackblitz 上的完整代码:https://stackblitz.com/edit/react-ts-k7tfxu?file=components%2FTodoList.tsx
TodoList.tsx
import React from 'react';
import TodoItem from './TodoItem';
import { useAppSelector } from '../app/hooks';
const TodoList = () => {
//if I remove this line, it's work fine!
const list = useAppSelector((state) => state.todos.list);
return (
<ul>
<TodoItem {...list} />
</ul>
);
};
export default TodoList;
store.tsx
import { configureStore } from '@reduxjs/toolkit';
import todosReducer from './features/todos-slice';
export const store = configureStore({
reducer: {
todos: todosReducer,
},
});
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;
我的自定义 Hooks
import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';
import { RootState, AppDispatch } from './store';
export const useAppDispatch = () => useDispatch<AppDispatch>();
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;
创建切片文件
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { TodoState } from '../../interface';
interface Todos {
list: TodoState[];
}
const initialState: Todos = {
list: [
{
id: 1,
text: 'Learn Javascript',
done: false,
},
{
id: 2,
text: 'Learn React',
done: false,
},
{
id: 3,
text: 'Build a React App',
done: false,
},
],
};
export const todosSlice = createSlice({
name: 'todos',
initialState,
reducers: {},
});
export default todosSlice.reducer;
我发现了一个问题!它是来自 React v.18 的新 Hook,它仍处于测试阶段 :)。有时,stackblitz 建议我添加最新版本的 React 并出现错误。我用的是老版本,效果很好
您需要确保所有版本都同步。在正在进行的项目中升级你的 React 版本时,你需要密切注意它所具有的所有依赖项。您可以尝试一些 npm 命令。
npm install --force,或--legacy-peer-deps
这将有助于解决旧的冲突版本
当我使用来自 react-redux 的 useSelector Hook 时,有时我会收到一条错误消息:“useSyncExternalStore 不是一个函数”。我试图搜索 google 来解决问题,但我没有找到任何东西。
这是我在 stackblitz 上的完整代码:https://stackblitz.com/edit/react-ts-k7tfxu?file=components%2FTodoList.tsx
TodoList.tsx
import React from 'react';
import TodoItem from './TodoItem';
import { useAppSelector } from '../app/hooks';
const TodoList = () => {
//if I remove this line, it's work fine!
const list = useAppSelector((state) => state.todos.list);
return (
<ul>
<TodoItem {...list} />
</ul>
);
};
export default TodoList;
store.tsx
import { configureStore } from '@reduxjs/toolkit';
import todosReducer from './features/todos-slice';
export const store = configureStore({
reducer: {
todos: todosReducer,
},
});
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;
我的自定义 Hooks
import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';
import { RootState, AppDispatch } from './store';
export const useAppDispatch = () => useDispatch<AppDispatch>();
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;
创建切片文件
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { TodoState } from '../../interface';
interface Todos {
list: TodoState[];
}
const initialState: Todos = {
list: [
{
id: 1,
text: 'Learn Javascript',
done: false,
},
{
id: 2,
text: 'Learn React',
done: false,
},
{
id: 3,
text: 'Build a React App',
done: false,
},
],
};
export const todosSlice = createSlice({
name: 'todos',
initialState,
reducers: {},
});
export default todosSlice.reducer;
我发现了一个问题!它是来自 React v.18 的新 Hook,它仍处于测试阶段 :)。有时,stackblitz 建议我添加最新版本的 React 并出现错误。我用的是老版本,效果很好
您需要确保所有版本都同步。在正在进行的项目中升级你的 React 版本时,你需要密切注意它所具有的所有依赖项。您可以尝试一些 npm 命令。
npm install --force,或--legacy-peer-deps
这将有助于解决旧的冲突版本