Arrays 在道具中通过redux商店是否未定义?
当我从Arrays 在道具中通过redux商店是否未定义?,arrays,node.js,reactjs,react-router-dom,Arrays,Node.js,Reactjs,React Router Dom,当我从let store=createStore(myReducer)传递存储时在其他组件的道具中,它未定义。当我使用react router dom时,就会发生这种情况,但如果不这样做,它就会正常运行。 路线部分 路线在App组件中 <BrowserRouter> <div> <Route path={"/layout"} component={Home} /> <Route path={
let store=createStore(myReducer)传递存储时代码>在其他组件的道具中,它未定义。当我使用react router dom
时,就会发生这种情况,但如果不这样做,它就会正常运行。
路线部分
路线在App
组件中
<BrowserRouter>
<div>
<Route path={"/layout"} component={Home} />
<Route path={"/form"} component={UserForm} />
<Route exact path={"/"} component={this.layout} />
</div>
</BrowserRouter
我在map
函数中遇到错误
{this.store.getState().user.map(u => {
return <UserDiv name={u.name} age={u.age} location={u.location} gender={u.gender} job={u.job} />;
})}
{this.store.getState().user.map(u=>{
返回;
})}
错误
无法读取未定义的属性“map”
奇怪的是,当我没有路线的时候,它就来了
提前感谢首先,为了从商店获取更新状态,您需要像
const unsubscribe = store.subscribe(() => {
store.getState();
})
因此,它不是一种处理变化的反应方式
其次,当您将store传递给Layout
组件时,完全有可能您没有绑定Layout
函数,因此此.props.store
未定义
为了使用react方式的Redux,您可以使用Provider和方法
import { Provider } from 'react-redux';
const renderAll = () => {
console.log("inside render all" ,store);
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
}
然后像这样连接车身部件
const mapStateToProps = (state) => {
user: state.user
}
export default connect(mapStateToProps)(Body)
{this.props.user.map(u => {
return <UserDiv name={u.name} age={u.age} location={u.location} gender={u.gender} job={u.job} />;
})}
确保在布局组件中使用连接的车身组件
在此之后,您可以在Body
组件中使用user state
const mapStateToProps = (state) => {
user: state.user
}
export default connect(mapStateToProps)(Body)
{this.props.user.map(u => {
return <UserDiv name={u.name} age={u.age} location={u.location} gender={u.gender} job={u.job} />;
})}
{this.props.user.map(u=>{
返回;
})}
如果用户值最初在redux存储中未定义,则需要在Body组件中添加一个复选框,然后才能像这样使用它
{this.props.user && this.props.user.map(u => {
return <UserDiv name={u.name} age={u.age} location={u.location} gender={u.gender} job={u.job} />;
})}
{this.props.user&&this.props.user.map(u=>{
返回;
})}
每当我删除app.get('*',(req,res)=>{res.sendFile(path.join(u dirname,'public/views/index.ejs');)时,我都会做你推荐的更改和另外一件事
从node.js服务器上,反应路由不工作。不知道为什么要使用browserRouter,您需要为任何路由提供index.ejs,这样客户端路由才能生效。但是当我将此路由保持在下面时,我的路由无法正常工作。他们正在给wierd resultAll您的其他路由需要在上面进行配置,我这样做了,然后每当我给任何路由时,它将只“/”它最好使用react redux库来处理。
const mapStateToProps = (state) => {
user: state.user
}
export default connect(mapStateToProps)(Body)
{this.props.user.map(u => {
return <UserDiv name={u.name} age={u.age} location={u.location} gender={u.gender} job={u.job} />;
})}
{this.props.user && this.props.user.map(u => {
return <UserDiv name={u.name} age={u.age} location={u.location} gender={u.gender} job={u.job} />;
})}