1

我的项目中有一个视图,用户可以在其中检索页面列表,也可以创建新页面。我的代码如下所示:

父组件(页)

class Pages extends Component {
  render() {
    return (
      <div className="pages container">
        <div className="pages">
          <ul>
            <li>
              <CreateNewPage projectId={ this.props.params.id } />
            </li>
            <li>Map list of exisiting pages</li>
          </ul>
        </div>
      </div>
    );
  }
}

子组件(创建新页面)

class CreateNewPage extends Component {
  handleFormSubmit( { pageName, projectId } ) {
    this.props.CreatePage( { pageName, projectId } );
  }

  render() {
    const { handleSubmit, fields: { pageName, projectId } } =  this.props;

    return (
      <form onSubmit={ handleSubmit( this.handleFormSubmit.bind( this ) ) } >
        <label>Create new page</label>
        <input { ...pageName } type="text" placeholder="Project name" />
        <input { ...projectId } type="hidden" value={ this.props.projectId } />
        <button type="submit">Create new page</button>
      </form>
    );
  }
}

export default reduxForm({
  form: 'createPage',
  fields: [ 'pageName', 'projectId' ]
}, null, actions )( CreateNewPage );

Pages 从 React Router 接收一个 ID 作为道具,我想在我的“创建新页面”组件中将它提供给 Redux 表单,以便我可以将页面与我的数据库中的项目相关联。

我目前通过将项目 ID 作为道具传递给“创建新页面”组件,然后将其存储在隐藏的输入字段中,从而使项目 ID 可用。

这是我的第一个 Redux 应用程序,所以我只想知道我这样做是否正确?提前谢谢了。

4

2 回答 2

4

与其在隐藏的输入中发送项目 ID,不如在 createPage 函数中简单地将其作为参数传递?

this.props.createPage(projectId, { pageName });

其中 projectId 可能是 this.props.projectId

于 2016-05-18T17:40:31.117 回答
3

Joshua Slate 的回答是正确的。projectId根本不需要是一个字段。

在教育方面...隐藏的输入在redux-form. 我将引用我对这个问题的回答:

redux-form 中并不真正存在隐藏输入的概念,因为隐藏输入是基于 ye olde HTML 提交表单的方式。redux-form 中的“隐藏输入”只是出现在字段列表中的字段(因此它将被提交),但不会呈现给任何输入。我对主键执行此操作,我的字段列表是['id', 'name', 'email'],并且我只呈现名称和电子邮件的输入,但所有三个都被提交。

于 2016-05-19T17:11:21.030 回答