react-redux 无法识别提供程序 - NextJS RTK Typescript

问题描述 投票:0回答:2

我正在尝试将 Redux RTK 集成到我的 Next JS 13.4 应用程序中。我按照一些教程来做到这一点,但在我的provider.ts文件中一次又一次地遇到同样的错误

'use client'
import { store } from './store';
import { Provider } from 'react-redux';

export function Providers({ children }: { children: React.ReactNode }) {
    return <Provider store={store}>{children}</Provider>;
}

错误是:

'Provider' refers to a value, but is being used as a type here. Did you mean 'typeof Provider'?ts(2749)

我已经卸载并重新安装了react-redux和其他软件包,我已经尝试更改我的eslintrc.json,但没有任何变化。从react-redux导入的Provider没有在return语句中使用,它在导入语句中仍然显示为灰色。

Redux 实现的其余部分在这里:

store.ts

'use client'
import { configureStore } from '@reduxjs/toolkit';
import authReducer from './features/auth-slice';

export const store = configureStore({
    reducer: {
        auth: authReducer,
    },
});

export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;

auth-slice.ts

'use client'

import { createSlice, PayloadAction } from '@reduxjs/toolkit';

export interface User {
    isAuth: boolean;
    id: string;
    name: string;
    isModerator: boolean;
}

export interface AuthState {
    user: User | null;
}

const initialState: AuthState = {
    user: null,
};

export const auth = createSlice({
    name: 'auth',
    initialState,
    reducers: {
        registerUser: (state, action: PayloadAction<Partial<User>>) => {
            const { id, name } = action.payload;
            state.user = {
                isAuth: true,
                id: id || '',
                name: name || '',
                isModerator: true,
            };
        },
        changeName: (state, action: PayloadAction<string>) => {
            if (state.user) {
                state.user.name = action.payload;
            }
        },
    },
});

export const { registerUser, changeName } = auth.actions;

export default auth.reducer;

最终实现在我的应用程序文件夹根目录下的layout.tsx中

import { Providers } from '@/redux/provider';
import './globals.css';

export const metadata = {
    title: 'Coworking Pro',
    description: 'Trouve ton coworking gratuit',
};

export default function RootLayout({
    children,
}: {
    children: React.ReactNode;
}) {
    return (
        <html lang='fr'>
            <body className='w-screen overflow-x-hidden'>
                <Providers>{children}</Providers>
            </body>
        </html>
    );
}

最后一个文件没有错误。

谢谢您的帮助

我重新安装了所有软件包,更改了一些配置文件(eslint)。我复制粘贴了一些实际有效的教程。但不适合我。

reactjs typescript redux next.js
2个回答
1
投票

我也遇到了这个错误,我只是将文件名从 ts 更改为 tsx,忘记了 typescript 实际上会考虑是否有 jsx 。


0
投票

您可以更改provider.ts->provider.tsx

© www.soinside.com 2019 - 2024. All rights reserved.