javascript - React JS 待办事项列表应用 |获取值并推送到状态

标签 javascript reactjs

我正在构建一个待办事项列表应用程序,该应用程序从默认设置的商店中获取两个对象。

无法将用户输入的内容作为新的“待办事项”项目并将其推送到商店/应用程序状态。

如果我单击“新建”按钮,则会成功创建一个新的待办事项,但是没有文本。

我使用handleChange函数从输入中获取值 - 我需要将该值作为createTodo函数的一部分发送到商店。

createToDo 函数调用将新的“待办事项”项目添加到商店的操作。我不知道如何将输入值与该函数联系起来以创建新的待办事项。

这是迄今为止我的代码:

import React from "react";

import Todo from "../components/Todo";
import * as TodoActions from "../actions/TodoActions";
import TodoStore from "../stores/TodoStore";


export default class Featured extends React.Component {
  constructor() {
    super()
    this.getTodos = this.getTodos.bind(this);
    this.state = {
      todos: TodoStore.getAll()
    }
  }

  componentWillMount() {
    TodoStore.on("change", this.getTodos);
    console.log("count", TodoStore.listenerCount("change"));
  }

  componentWillUnmount() {
    TodoStore.removeListener("change", this.getTodos);
  }

  getTodos() {
    this.setState({
      todos: TodoStore.getAll(),
    });
  }

  createTodo(text) {
    TodoActions.createTodo();
  }

  handleChange(e) {
    let text = e.target.value;
    console.log(text);
  }

  reloadTodos() {
    TodoActions.reloadTodos();
  }


  render() {
    const { todos } = this.state;

    console.log("todos", todos);

    const todoitems = todos.map((todoitem) => {
      return <Todo key={todoitem.id} {...todoitem} />
    });

    return (
      <div className="todolist-wrapper">
        <h1>To do list</h1>
        <button onClick={this.reloadTodos.bind(this)}>Reload</button>
        <ul>
          {todoitems}
        </ul>
        <input type="text" onChange={this.handleChange.bind(this)} />
        <button onClick={this.createTodo.bind(this)}>Create new</button>
      </div>
    );
  }
}

最佳答案

首先将值添加到组件的状态:

constructor() {
  ...
  this.state = {
    todos: TodoStore.getAll(),
    value: ""
  }
}

您可以将其添加为 input 元素本身的 value 属性(以便让您的 中的初始 value state 控制 input 元素的初始渲染值):

<input type="text" value={this.state.value} onChange={this.handleChange.bind(this)} />

然后在 handleChange 函数中,使用 setState 修改状态值:

handleChange(e) {
  let text = e.target.value;
  this.setState({
    value: text
  });
}

现在,您可以在 createTodo 函数中从组件的 state 获取:

createTodo() {
  let text = this.state.value;
  TodoActions.createTodo(text);
}

关于javascript - React JS 待办事项列表应用 |获取值并推送到状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243154/

相关文章:

javascript - 从 React Hook 复制一个数组

javascript - bootstrap-datepicker 全局设置语言

javascript:确保闭包中的对象被垃圾收集

javascript - 为什么在 Promise 之后使用 ExpressJS 中的 then() 回调会给出错误?

javascript - Meteor忘记密码实现

javascript - 如何将 TradingView 小部件插入脚本标记链接 : https://www. Tradingview.com/widget/market-overview/中的 React JS 中

javascript - PrimeFaces confirmDialog 中的倒数计时器

Javascript 表单验证 |设置特定的输入格式

javascript - JQuery和XML调整背景

javascript - clearInterval 不重置