不确定为什么会出现以下错误。
我刚刚设置我的商店、操作和减速器,我还没有调用任何调度。
应用程序运行良好,Redux 状态未更新
import React from 'react'
import ReactDOM from 'react-dom'
import { createStore, applyMiddleware, compose } from 'redux'
import { Provider } from 'react-redux'
import thunk from 'redux-thunk'
import reducer from './reducer'
import App from './App'
import css from './coinhover.scss'
const element = document.getElementById('coinhover');
const store = createStore(reducer, compose(
applyMiddleware(thunk),
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
));
ReactDOM.render(
<Provider store={ store }>
<App />
</Provider>, element);
src/reducer/index.js
import { combineReducers } from 'redux'
import { coins } from './coins'
export default combineReducers({
coins
});
src/reducer/actions/coins.js
import * as api from '../../services/api'
import { storage, addToPortfolio } from '../../services/coinFactory'
export const ADD_COIN = 'ADD_COIN'
export function getCoin(coin) {
return dispatch => {
api.getCoin(coin)
.then((res_coin) => addToPortfolio(res_coin))
.then((portfolio) => dispatch(updatePortfolio(portfolio)));
}
}
export function updatePortfolio(portfolio) {
return {
type: ADD_COIN,
portfolio
}
}
最后 src/reducer/coins/index.js
import { ADD_COIN } from './actions'
const initialState = [];
export default (state = initialState, action) => {
switch(action.type) {
case ADD_COIN:
return action.portfolio;
default:
return state;
}
}
您的问题在于如何导入
coins
减速器:
import { coins } from './coins'
后者尝试获取从 ./coins 中的文件返回的命名导出。
您不只使用任何命名导出
export default
,因此您只需按如下方式导入文件:
import coins from './coins';
使用后者将导致
coins
将包含 export default
的值;这将是硬币减少器。
即使您的所有导入均已正确导入,这种情况仍然可能因其他原因而发生。循环依赖!
就我而言,这是由于文件中的循环依赖而发生的。我无意中创建的项目中有两个循环依赖。示例:
rootReducer.ts -> authSlice.ts -> rootReducer.ts
.
这些依赖项通常不那么容易调试。我使用 this 包来检查循环依赖关系。一旦消除了循环依赖,一切就都好了。
啊刚刚发现了,我错误地导入了我的硬币减速器...
import { combineReducers } from 'redux'
import coins from './coins' // because I have coins/index.js
export default combineReducers({
coins
});
而不是
import { coins } from './coins'
这是我的修复:
import { combineReducers } from 'redux'
import { coins } from './coins'
export default combineReducers({
coinsState: coins || (() => null) // By adding this I resolved it.
});
如果没有什么对你有用,这可能是循环依赖。我有一个类似的项目,需要在切片中存储状态。有一个可用的 thunk 可以为您提供状态,而无需导入商店本身,而不是使用商店。如果你有这种边缘情况,你可以从 thunk 获取状态。
thunkAPI.getState()
就我而言,我没有向我的减速器添加默认属性。当我添加它时,它起作用了。 这是我的代码;
const counterReducer = (state = 0, action) => {
switch(action.type){
case 'INCREMENT':
return state + 1;
case 'DECREMENT':
return state - 1;
default:
return state;
}
}
export default counterReducer;
并合并文件;
import counter from './counter';
import { combineReducers } from 'redux';
const allReducers = combineReducers({
counter: counter,
});
export default allReducers;
我无法获得 产品 Admin.js 上有我的代码 在此输入图片描述
const products = useSelector((state) => state.products.array)
console.log(products);
当我运行它时,出现错误无法读取未定义的属性(读取“数组”)
这是我的store.js代码:
import { configureStore } from "@reduxjs/toolkit";
import productSlice from "./reducers/productSlice";
export const store = configureStore({
reducer: {
products: productSlice
}
})
这是我的index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import { Provider } from 'react-redux';
import { store } from './redux/store';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<Provider store={store}>
<App />
</Provider>
);
这是我的productSlice.js
import { createSlice } from "@reduxjs/toolkit";
const productSlice = createSlice({
name: 'products',
initialState: { array: [] },
reducers: {
setProductArr: (state, action) => {
state.array = action.payload
}
}
})
export const { setProductArr } = productSlice.actions
export default productSlice.reducers
抱歉,这是我第一次要求 stackoverflow
在所测试的减速器中,我从另一个减速器导入了一些常量。复制粘贴该值并删除导入修复了警告。
(当然,将其提取到第三个文件是有意义的)