当前位置: 首页 > 面试题库 >

在道具中传递redux来作为未定义的道具?

冯文彬
2023-03-14
问题内容

当我将商店从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

布局方法

  layout(){
    return (
        <Layout store={this.props.store} />
    );
  }

我正在像这样通过应用程序组件传递商店

const renderAll = () => {
    console.log("inside render all" ,store);
    ReactDOM.render(
      <App store={store} />,
      document.getElementById('root')
    );
}

该商店将从这样的布局组件转到主体组件

 <Body ChangeName={this.handleChangeName} store = { this.store}  s_key={this.state.inputkey} />

在主体组件中,我是从正在node.js服务器中运行的api获取的 componentWillMount()

 fetch('/api/get/all',{
    headers : {
    'content-Type': 'application/json',
    }
 }).then((res)=>{
      console.log(res);
      return res.json();
 }).then(users =>{
      this.store.dispatch({
        type :"FETCH_ALL",
        data : users
      })
      this.setState({
        user: users
      })
      // console.log(this.state.user);
 });

我在map功能中出现错误

 {this.store.getState().user.map(u => {
       return  <UserDiv name={u.name} age={u.age} location={u.location} gender={u.gender} job={u.job} />;
  })}

错误

无法读取未定义的属性“地图”

奇怪的是,当我在没有路线的情况下工作时,一切都会好起来的,谢谢


问题答案:

首先,为了从商店获取更新状态,您需要 subscribe

const unsubscribe = store.subscribe(() => {
    store.getState();
})

因此,这不是应对变更的一种React方法。

其次, 当您将存储传递到Layout组件时,很有可能您没有bindlayout函数,因此this.props.store未定义。

为了使用Redux的反应方式,您可以使用Provider和 connect 方法

import { Provider } from 'react-redux';
const renderAll = () => {
    console.log("inside render all" ,store);
    ReactDOM.render(
      <Provider store={store}>
          <App />
     </Provider>,
      document.getElementById('root')
    );
}

然后您的路线可以简单地

你可以BodyLayout喜欢调用组件

 <Body ChangeName={this.handleChangeName} s_key={this.state.inputkey} />

并像

const mapStateToProps = (state) => {
   user: state.user
}

export default connect(mapStateToProps)(Body)

确保connected Body component在布局组件中使用。

之后,您可以user stateBody类似的组件中使用

{this.props.user.map(u => {
       return  <UserDiv name={u.name} age={u.age} location={u.location} gender={u.gender} job={u.job} />;
})}

如果最初在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} />;
})}


 类似资料:
  • 我想将自定义属性传递到我的Redux表单字段。文件中说: 传递给字段的任何自定义道具都将与输入和元对象合并到同一级别的道具对象中。 但将自定义道具传递给字段组件将引发编译错误: 类型“”的属性“myProp”不存在 在props属性中,我只能添加一组预定义的属性,如占位符或类型。传递另一个道具将抛出此错误: 键入“{name:“E-Mail”;组件:(props:any)= 是否有可能将自定义道具

  • 我是一个相当新的反应,这是一个我正在努力解决的问题。

  • 我使用的是dev-express中的react-grid库,库中有一个表组件,我们可以向它传递单元格组件,在CustomCell中,我使用的是Material UI中的菜单 在上述情况下,菜单工作良好, 但是我想要传递道具到这个组件,我尝试了以下操作 在这种情况下菜单不工作,我想知道是否有一个替代的方法来实现第二种情况。

  • 问题内容: 可以说我有: 在Tabs组件内部,具有属性 儿童[0](this.props.children)看起来像 儿童[0]。道具看起来像 最终,Children对象看起来像(这是我想要传递的): 问题是这样,如果我这样重写MultiTab 在选项卡组件内部 看起来和上面一样。 好像 我希望该物业看起来像。上面只是打印出Statement函数。 这是一个很奇怪的问题,但是长话短说,我正在使用一

  • 问题内容: 工具:Reactjs 0.14.0 Vanilla Flux 我需要唯一标识符的原因有两个: 儿童和解 跟踪点击了哪个孩子 因此,假设我有一个看起来像这样的消息列表: 现在,我使用“ Array.prototype.map()” 在所有者组件内部创建“ ownee” 组件() 但是this.props.key在MessageListItem中是未定义的,即使我知道在传递时已定义的事实也

  • 我试图通过反应路由器将道具从一个组件传递到另一个组件。当我试图从子组件获取道具时,我得到了这样一条消息。这是我的代码: Tracks.jsx: app.jsx: Album.jsx: