Я новичок в мире 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>
)
}
}
Похоже, переменная name
из userReducer
не распознается, когда я пытаюсь передать ее компоненту SearchBar
.
Я не уверен, почему? Возможно, я неправильно структурировал index.js
, пытаясь использовать Provider
для предоставления магазина? Или, может быть, что-то не так с моей функцией подключения?
ОШИБКА:
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)