React / Redux Form передает реквизиты детям

У меня есть представление в моем проекте, где пользователь может получить список страниц, а также может создать новую страницу. Мой код выглядит так:

РОДИТЕЛЬСКИЙ КОМПОНЕНТ (СТРАНИЦЫ)

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, и я хочу сделать его доступным для формы Redux в моем компоненте «Создать новую страницу», чтобы я мог связать страницу с проектом в моей БД.

В настоящее время я делаю доступным идентификатор проекта, передавая его в качестве опоры компоненту «Создать новую страницу», а затем сохраняя его в скрытом поле ввода.

Это мое первое приложение Redux, поэтому все, что я хочу знать, правильно ли я это делаю? Спасибо заранее.


person mtwallet    schedule 18.05.2016    source источник


Ответы (2)


Вместо того, чтобы отправлять идентификатор проекта в скрытом вводе, не могли бы вы просто передать его в качестве аргумента в своей функции createPage?

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

Где projectId может быть this.props.projectId

person Josh Slate    schedule 18.05.2016

Ответ Джошуа Слейта правильный. projectId вообще не обязательно должно быть полем.

С образовательной стороны ... Скрытые вводы не имеют смысла в redux-form. Я процитирую свой ответ на этот вопрос:

Концепция скрытых входов на самом деле не существует в redux-form, поскольку скрытые входы основаны на старом HTML-способе отправки форм. «Скрытый ввод» в redux-form - это просто поле, которое появляется в списке полей (так что оно будет отправлено), но оно не отображается ни для какого ввода. Я делаю это для первичных ключей, где мой список полей - ['id', 'name', 'email'], и я визуализирую только входные данные для имени и электронной почты, но все три отправляются.

person Erik R.    schedule 19.05.2016