【问题标题】:React-Redux: Forms in component or container?React-Redux:组件或容器中的表单?
【发布时间】:2017-06-09 11:30:06
【问题描述】:

我很难理解何时使用组件以及何时使用容器。我知道只有容器应该连接到商店,所有(展示)组件都应该获得所有必要的输入作为道具。

如果我想写一个登录页面,我会创建一个LoginPage.js 来呈现UserForm.js。现在我不太明白如何从这里开始。我应该将 UserForm 连接到商店或 LoginPage 还是编写一个呈现 LoginPage.js 并连接到商店的 LoginContainer.js 会更好?

在最后一种情况下,我如何在提交 UserForm 时调度(异步,使用 redux-thunk)动作。这必须以某种方式从 LoginPage 完成,但 LoginPage 不知道任何提交,是吗?

我希望这个问题不要太模糊或不清楚。 任何帮助将不胜感激!

干杯

【问题讨论】:

    标签: reactjs redux redux-thunk


    【解决方案1】:

    将您的 LoginPage.js 连接到 redux 存储并在其中渲染 LoginForm.js。将所有必要的数据作为 props 传递(也可以传递函数)

    对于前- 你的LoginPage.js 会是这样的(我这里没有写完整的代码)

    onLogin(loginData) {
      // do what you wanna do on login and call routeActions to move another 
      page after successfull login 
    }
    render() {
     return(
       <LoginForm login={this.props.login} onLogin={this.onLogin} />
     );
    }
     const mapStateToProps = (state) => ({
       login: state.login, // put your redux state here
     });
     export default connect(mapStateToProps)(LoginPage);
    

    别忘了声明 props...

    你的LoginForm.js应该是这样的

    render() {
      return (
         //some html stuff here(login form)
         // on submit call that method from props 
         // this.props.onLogin(pass login data here)
      );
    }
    

    我希望这会对您有所帮助。 如果您在这里有任何查询帖子...

    【讨论】:

    • 那么我必须在 onLogin() 中调度一些 LOGIN_REQUEST 操作?
    • 谢谢!您能否简要评论一下为什么这是推荐的方式?为什么直接连接 LoginForm 或为 LoginPage 创建一个额外的容器不是一个好主意?
    • 基本上你的组件应该是愚蠢的......那不知道redux存储/状态......它们只是展示组件......同样你可以拥有更合适的容器这样做的方法...您的页面将包含连接到路由的组件...然后这些将呈现容器...这是我个人喜欢做的方式...最终取决于您想要的方式构建你的项目.....
    猜你喜欢
    • 2017-07-06
    • 2017-09-10
    • 2017-06-13
    • 1970-01-01
    • 2017-02-09
    • 2016-10-18
    • 2019-04-22
    • 1970-01-01
    • 2016-08-02
    相关资源
    最近更新 更多