@doppelgangerz
JavaScript

Как отрисовать элемент используя данные из объекта?

Пишу todo приложение, сначала реализовывал простой механизм туду листа с записью текста в массив. Однако сейчас я решил расширить функционал и хочу, чтобы был массив объектов.

this.state = {
todoList: [{
key: 0,
text: '',
done: false
}]
}

Как переписать эти строки так, чтобы они создавали объект в массиве с текстом из инпута?

handleSubmit = (e) => {
    if (e.keyCode === 13 && e.target.value !== '') {
      console.log('success');
      const { value } = e.target;
      this.setState(prevState => ({
        todoValue: [...prevState.todoValue, value]
      }));
      e.target.value = '';
    }
  }

Привожу весь код:

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      todoValue: []
    };
  }
  render() {
    return (
      <div className="body-container">
        <h1>To Do List</h1>
        <input placeholder="Введите заметку" type="text" onKeyDown={this.handleSubmit}/>
        <input type="button" value="Очистить список" className="resetBtn" onClick={this.handleReset}/>
        <AlertSelect />
        <hr />
        <ul>
          {this.state.todoValue.map((text, index) => (
            <Li click={this.handleClick} key={index} text={text}/>
          ))}
        </ul>
      </div>
    )
  }

  handleReset = () => {
    this.setState({
      todoValue: []
    })
  }

  handleSubmit = (e) => {
    if (e.keyCode === 13 && e.target.value !== '') {
      console.log('success');
      const { value } = e.target;
      this.setState(prevState => ({
        todoValue: [...prevState.todoValue, value]
      }));
      e.target.value = '';
    }
  }
}
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
this.setState(state => ({
  todoList: [...state.todoList, { id: nanoid(8), text: value, done: false }],
}));

для генерации id используется nanoid

{this.state.todoList.map(todo => (
  <Todo click={this.handleClick} key={todo.id} todo={todo} />
))}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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