【发布时间】:2019-03-25 21:33:59
【问题描述】:
我是 Redux 世界的新手,我正在尝试将它与 React 联系起来。 我用下一种方式构建了我的应用程序:
index.js:
const userReducer = (state={
name: "max"
}, action) => {
switch(action.type){
case "SET_NAME":
state = {
...state,
name: action.payload
};
break;
return state;
};
const myLogger= (store) =>(next)=>(action)=>{
console.log("logged action: ",action);
next(action);
};
const store = createStore(combineReducers({user: userReducer}),{}, applyMiddleware(myLogger,logger));
store.subscribe(()=>{
console.log("Store upadated", store.getState());
});
ReactDOM.render(
<BrowserRouter>
<Provider store={store}>
<App/>
</Provider>
</BrowserRouter>,
window.document.getElementById('container'));
app.js:
class App extends React.Component{
render(){
return(
<div>
<SearchBar
username = {this.props.user.name}/>
</div>
)
}
}
const mapStateToProps = (state) => {
return{
user: state.user,
math: state.math
};
};
const mapDispatchToProps = (dispatch) => {
return{
setName: (name) =>{
dispatch({
type: "SET_NAME",
payload: name
});
}
};
};
export default connect(mapStateToProps, mapDispatchToProps)(App);
searchBar.js:
export default class SearchBar extends React.Component{
render(){
return(
<div>
Name: {this.props.username}
</div>
)
}
}
当我试图将来自userReducer 的name 变量传递给SearchBar 组件时,它似乎无法识别。
我不知道为什么?我是否可能通过尝试使用 Provider 来提供存储来构建我的 index.js 错误?还是我的连接功能有问题?
错误:
Uncaught TypeError: Cannot read property 'name' of undefined
at component (app.js:141)
at mountIndeterminateComponent (react-dom.development.js:8574)
at beginWork (react-dom.development.js:8978)
at performUnitOfWork (react-dom.development.js:11814)
at workLoop (react-dom.development.js:11843)
at HTMLUnknownElement.callCallback (react-dom.development.js:100)
at Object.invokeGuardedCallbackDev (react-dom.development.js:138)
at invokeGuardedCallback (react-dom.development.js:187)
at replayUnitOfWork (react-dom.development.js:11318)
at renderRoot (react-dom.development.js:11885)
【问题讨论】:
-
您最初的
state是什么? -
@AlexandrZavalii
state={ name: "max", age: 27 } -
抱歉错过了。您的代码在您发送操作后是否会抛出错误?
-
@AlexandrZavalii 是的,它无法识别变量名。我认为这可能是我在应用程序中的结构或只是连接功能
-
您正在将
state.user映射到this.props.user,这在您所在的州不存在。因此,当您尝试获取this.props.user.name时,this.props.user为空/未定义,因此它没有name属性
标签: reactjs redux react-redux