Сегодня я начал создавать приложение Next.js.
Я использую Redux (next-redux-wrapper
) для управления своим глобальным состоянием.
(Я также сохраняю некоторый редуктор с помощью redux-persist).
Я только что внедрил redux-thunk
и тут же получил очень странную ошибку. Я действительно не знаю, почему возникает эта ошибка. Я в основном только что сделал настройку, не создавая никаких редукторов (ошибка все еще была после того, как я создал редьюсер).
Уже не первый раз делаю такую же настройку без проблем, но в этот раз не могу избавиться от этой ошибки.
Код ошибки
Предупреждение. Использование UNSAFE_componentWillReceiveProps в строгом режиме недопустимо. рекомендуется и может указывать на ошибки в вашем коде. Видеть https://reactjs.org/link/unsafe-component-lifecycles для подробностей.***
- Переместить код получения данных или побочные эффекты в компонентDidUpdate.
- Если вы обновляете состояние при изменении реквизита, реорганизуйте свой код, чтобы использовать методы мемоизации *** или переместите его в статический получитьдериведстатефромпропс. Узнайте больше на: https://reactjs.org/link/derived-state Обновите следующее компоненты: withRedux(MyApp)
Если вам нужно больше кода, пожалуйста, спросите. Просто у меня действительно больше нет. Возможно package.json
.
_app.js
import App from 'next/app'
import { wrapper } from '../reduxStore/store'
import { useStore } from 'react-redux'
import PropTypes from 'prop-types'
function MyApp({ Component, pageProps }) {
const store = useStore((state) => state)
return <Component {...pageProps} />
}
MyApp.propTypes = {
Component: PropTypes.func,
pageProps: PropTypes.object,
}
export default wrapper.withRedux(MyApp)
store.js
import { createStore, applyMiddleware, combineReducers } from 'redux'
import { HYDRATE, createWrapper } from 'next-redux-wrapper'
import thunkMiddleware from 'redux-thunk'
import userReducer from './reducers/userReducer'
const bindMiddleware = (middleware) => {
if (process.env.NODE_ENV !== 'production') {
const { composeWithDevTools } = require('redux-devtools-extension')
return composeWithDevTools(applyMiddleware(...middleware))
}
return applyMiddleware(...middleware)
}
const combinedReducer = combineReducers({
user: userReducer,
})
const reducer = (state, action) => {
if (action.type === HYDRATE) {
const nextState = {
...state, // use previous state
...action.payload, // apply delta from hydration
}
// if (state.count.count) nextState.count.count = state.count.count // preserve count value on client side navigation
return nextState
} else {
return combinedReducer(state, action)
}
}
export const makeStore = ({ isServer }) => {
if (isServer) {
//If it's on server side, create a store
return createStore(reducer, bindMiddleware([thunkMiddleware]))
} else {
//If it's on client side, create a store which will persist
const { persistStore, persistReducer } = require('redux-persist')
const storage = require('redux-persist/lib/storage').default
const persistConfig = {
key: 'nextjs',
whitelist: ['user'], // only counter will be persisted, add other reducers if needed
storage, // if needed, use a safer storage
}
const persistedReducer = persistReducer(persistConfig, reducer) // Create a new reducer with our existing reducer
const store = createStore(
persistedReducer,
bindMiddleware([thunkMiddleware]),
) // Creating the store again
store.__persistor = persistStore(store) // This creates a persistor object & push that persisted object to .__persistor, so that we can avail the persistability feature
return store
}
}
export const wrapper = createWrapper(makeStore)
Проблема заключается в используемой вами библиотеке: github.com/kirill-konshin/next-redux-wrapper/blob/7.0.2/…