【发布时间】:2017-02-24 11:25:19
【问题描述】:
你能帮我解决异常吗Unexpected key "userName" found in preloadedState argument passed to createStore. Expected to find one of the known reducer keys instead: "default". Unexpected keys will be ignored.
我发现了这个Link,但它对我没有帮助。我不明白什么,也许这部分来自文档:与传递给它的键具有相同形状的普通对象
你能解释一下我在示例中的错误吗?
import React from "react";
import ReactDOM from "react-dom";
import { Provider } from 'react-redux';
import { createStore, combineReducers, applyMiddleware } from 'redux';
import App from './containers/App.jsx';
import * as reducers from './reducers'
import types from './constants/actions';
const reducer = combineReducers(reducers);
const destination = document.querySelector("#container");
var store = createStore(reducer, {
userName : ''
});
ReactDOM.render(
<Provider store={store}>
<App/>
</Provider>,
destination
);
console.log(1)
store.subscribe( ()=> {
console.log("-------------------------")
let s = store.getState()
console.log("STATE = " + s)
for (var k in s) {
if (s.hasOwnProperty(k)) {
console.log("k = " + k + "; value = " + s[k]);
}
}
})
store.dispatch({
type: types.LOAD_USER_NAME,
userName : "Oppps1"
})
我的减速机:
import types from './../constants/actions'
export default function userNameReducer (state = {userName : 'N/A'}, action) {
console.log('inside reducer');
switch (action.type) {
case types.LOAD_USER_NAME:
console.log("!!!!!!!!!!!!!!!")
console.log("action.userName = " + action.userName)
for (var k in state) {
if (state.hasOwnProperty(k)) {
console.log("k = " + k + "; value = " + state[k]);
}
}
return action.userName;
default:
return state
}
}
执行后在控制台中的结果:
【问题讨论】:
-
你的 reducer 应该是纯函数,所以去掉副作用(console.log 的东西)
-
@IslamIbakaev 谢谢你的推荐,但它已经解决了这个问题
-
你的意思是它现在可以正常工作了吗?
-
@IslamIbakaev -- 我认为他们的意思不是,它确实没有解决问题 -- 而且它与问题完全无关。
标签: javascript reactjs redux