То же имя поля в сокращенной форме

Я работаю над разделом комментариев и использую сокращенную форму для ввода. У меня есть только один компонент Field для ввода. Но когда я печатаю в поле ввода, все поля ввода заполняются одним и тем же значением. Я знаю, что это потому, что все эти поля ввода имеют одинаковое имя. Но я хочу заполнить значение только выбранным полем ввода. Как мне это сделать?

Вот мой компонент:

import { compose } from "redux";
import { connect } from "react-redux";
import React, { Component } from "react";
import { Field, reduxForm } from "redux-form";

import { addComment, fetchPosts } from "../../../actions/FeedPost";
import "./FeedCommentsInput.css";
import TextareaAutosize from "react-textarea-autosize";

class FeedCommentsInput extends Component {
  renderField = field => {
    const { touched, error } = field.meta;
    const className = `comment-input-box ${
      touched && error ? "red-border__error-comment" : ""
    }`;
    return (
      <TextareaAutosize
        {...field.input}
        placeholder = {field.placeholder}
        type = {field.type}
        className = {className}
      />
    );
  };

  onSubmit = formProps => {
    const { postid } = this.props;
    this.props.addComment(formProps, postid);
  };

  render() {
    const { handleSubmit } = this.props;

    return (
      <div>
        <form onSubmit = {handleSubmit(this.onSubmit)}>
          <Field
            name = "text"
            component = {this.renderField}
            type = "text"
            placeholder = "Enter your Comment"
          />
          <button type = "submit">Submit</button>
        </form>
      </div>
    );
  }
}

const validate = values => {
  const errors = {};

  if (!values.comment) errors.comment = "Please Enter Something";

  return errors;
};

export default compose(
  connect(
    null,
    { addComment, fetchPosts }
  ),
  reduxForm({ validate, form: "commentbox" })
)(FeedCommentsInput);

Что вы имеете в виду под all the input boxes get filled, я вижу здесь только одно текстовое поле

mbeso 23.10.2018 12:18

@mbeso он включает одну и ту же форму несколько раз на одну страницу. У одного поста много комментариев.

Jordan Enev 23.10.2018 12:22

о, понятно, вопрос был немного странным :)

mbeso 23.10.2018 12:23

Похоже, вы нашли ответ на свой вопрос, я бы порекомендовал, чтобы в будущем, спрашивая о состоянии в отношении reduxForm, вы включали свой файл reducers/index.js, чтобы мы могли увидеть, как вы настраиваете formReducer.

Daniel 23.10.2018 15:02

@ Дэниел, ладно, я буду иметь это в виду

kamal11 23.10.2018 15:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
5
906
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Просто передайте уникальную опору form вашему компоненту формы.

Ваша интеграция с redux-form изменится на:

// No need to configure `form`, because it would be set dynamically via props
reduxForm({ validate })

Использование:

<Form form = {`commentbox_${uuid}`} />

Кредиты.

У вас много форм для комментариев, но все поля для комментариев используют одну и ту же форму (commentbox), это создает проблему.

Вам нужно динамически создать форму с подфиксом индекса:

const commentForm1 = reduxForm({ validate, form: "commentbox_1" })
const commentForm2 = reduxForm({ validate, form: "commentbox_2" })

На самом деле это тот же ответ, что и мой. Какой смысл публиковать один и тот же ответ дважды? :)

Jordan Enev 23.10.2018 12:44

Я завершил свой ответ за 10 минут, когда я начинаю комментировать, я не вижу вашего ответа =))

Kenzk447 23.10.2018 12:53

@JordanEnev, как вы хорошо знаете, посты проходят аудит, поэтому я не буду об этом беспокоиться. Если что-то упущено, это будет рассмотрено.

Daniel 24.10.2018 18:25

Вот почему я считаю, что при работе со сложными библиотеками, такими как reduxForm, важно установить базовый вариант и заставить его работать. Я имею в виду, что сначала я бы реализовал простую форму, чтобы убедиться, что она работает, прежде чем перейти к написанию той тонны кода, которую вы написали, чтобы позже обнаружить, что что-то не работает должным образом.

Например, я бы начал с этого:

class FeedCommentsInput extends Component {
  render() {
    return ( 
    <div>
       <form onSubmit = {this.props.handleSubmit(values => console.info(values))}>
           <Field type=“text” name=“feedTitle” component=“input” />
        <button type=“submit”>Submit</button>
       </form>
    </div>
    );
  }
}

export default reduxForm({ form: 'FeedCommentsInput' })(FeedCommentsInput);

Никаких проверок, ничего больше, конечно, только эти простые инструкции по настройке, импорту и экспорту. Теперь с этой настройкой, когда пользователь отправляет форму, будет вызвана функция, переданная нам формой redux, и она будет внутренне вызывать функцию, которую я передал внутри onSubmit.

Затем я бы пошел в браузер и протестировал его, добавив текст и щелкнув «Отправить», и когда я это сделаю, я должен увидеть журнал консоли с ключом feedTitle и значением текста, который я набрал.

Это почти весь процесс reduxForm в двух словах, и это то, что я бы установил в первую очередь, чтобы убедиться, что все работает.

Когда я добавляю обработчик onSubmit в форму, а затем вызываю внутри него handleSubmit() и предоставляю свою стрелочную функцию. Стрелочная функция будет вызываться автоматически всякий раз, когда пользователь отправляет форму.

Объект значений внутри журнала консоли - это текст, введенный во входные данные, а ключ объекта - это name, добавленный в компонент Поле. Вот почему свойство name, требуемое компонентом Field, также может быть использовано, чтобы помочь вам. Если вы не видели feedTitle, вы бы знали, что что-то работает неправильно, прежде чем приступить к написанию кода для проверки и так далее.

Другие вопросы по теме