@arishaYako_14

Как добавлять новый компонент с каждым инпутом в React?

Делаю небольшое приложение для тренировки типа клона Trello. Мне нужно, когда я в форму ввожу что-то и нажимаю на ''create', мне нужно, чтобы у меня появлялся новый компонент с заголовком в виде этого инпута. Проблема в том, что мне нужно, чтобы при каждом новом инпуте появлялись еще компоненты, никак не получается это осуществить.
Вот как я пытаюсь это сделать:
import React, {Component} from 'react';
import './AddForm.css';
import TaskBoard from '../TaskBoard/TaskBoard';

export default class AddForm extends Component{
    constructor(props){
        super(props);
        this.state = {
            input: '',
            obj: [],
            
        }
        this.onHandleChange = this.onHandleChange.bind(this);
        this.onHandleSubmit = this.onHandleSubmit.bind(this);
    }

    onHandleChange(e){
        this.setState({
            input: e.target.value
        });
        
    }

   onHandleSubmit(){
        this.state.obj.push(this.state.input);
        this.setState({
            input: ''
        })
   }

   

    render(){
        return(
            <div className = 'adder'>
                <h1 className = 'header'>Enter the type of tasks you need to be done:</h1>
                <div>
                <form>
                    <input className = 'board-add'  onSubmit = {this.onHandleSubmit} onChange = {this.onHandleChange} type = 'search' name = 'textarea' placeholder = 'How shall we call the board?'/>
                    <p><button className = 'cancel'>CANCEL</button>
                    <button onClick = {this.onHandleSubmit} className = 'create'>CREATE</button></p>
                </form>
                </div>
                {this.state.obj.map((item) => <TaskBoard taskType = {item} />)}
            </div> 

        );
    }
}
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
@Floatname
Вот так нельзя писать this.state.obj.push(this.state.input), для обновления стейта всегда нужно использовать setState({}) обязательно

А чтобы рендерить компоненты с помощью цикла, вам нужно дополнительно функцию написать примерно такую
createTaskBoard = () => {
    return this.state.obj.map((item) => <TaskBoard taskType = {item} />)
}

render () {
    return (
        <div className = 'adder'>
            // ... ваш код
            { this.createTaskBoard() }
        </div>
   )
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы