不知道为什么会出现以下错误。
我只是设置我的商店,行动和还原器,我还没有打电话给调度任何东西。
预期
应用程序运行正常,Redux状态未更新
结果
src/reducer/index. js
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);
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
}
}
finally 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;
}
}
7条答案
按热度按时间oknwwptz1#
您的问题在于如何导入
coins
reducer:后者尝试获取从中的文件返回的命名导出。/硬币。
您没有使用任何命名的exports only
export default
,因此您只需要导入文件,如下所示:使用后者将导致
coins
将包含export default
的值;这将是硬币还原器。46scxncf2#
即使您的所有导入都正确导入了,但由于另一个原因,这种情况仍可能发生。循环依赖!
在我的例子中,这是因为文件中的循环依赖。我有两个循环依赖在我创建accedentally项目。例如:
rootReducer.ts -> authSlice.ts -> rootReducer.ts
。这些依赖项通常不容易调试。我使用this包来检查循环依赖。一旦循环依赖被移除,一切都很好。
rkttyhzu3#
啊刚刚发现它,我是进口我的硬币减速器不正确。..
而不是
yc0p9oo04#
这是我的修正:
sgtfey8w5#
如果没有什么对你有用,这可能是一个循环依赖。我有一个类似的项目,需要在切片中存储状态。有一个可用的形实转换程序,它可以为您提供状态,而无需导入存储本身。如果你有这个边缘情况,你可以从thunk得到状态。
j8ag8udp6#
在我的例子中,我没有向我的reducers添加默认属性。当我添加它的时候,它起作用了。这是我的代码;
并合并文件;
irlmq6kh7#
当我运行它时,我得到了一个错误**无法读取未定义的属性(阅读'数组')***
那是我的商店js code:
这是我的索引。js
这是我的产品Slice。js