如何为我的函数访问数组中的属性?

唐尼·贝里

我在React中做了一个待办事项清单。我设置了一些属性,以在添加待办事项时拉动。(文本,键和editMode)。

我正在尝试设置它,当我双击todo元素时,我双击的特定元素会进入编辑模式。为此,我设置了一个函数

  • 元素的editMode属性设置为true,它将变成要编辑的文本框。

    但是,当我进行此设置时,它会将所有

  • 元素(待办事项)进入编辑模式,我无法弄清楚如何特别选择单击的元素进入编辑模式。

    我将如何使用已有的代码实现这一目标?

    import React from "react";
    import { isTemplateElement, tsStringKeyword } from "@babel/types";
    
    class TodoListt extends React.Component {
      state = {
        userInput: '',
        todos: [],
        editMode: false
      }
    
      handleChange(e, index) {
        this.setState({
          userInput: (e)
        })
        console.log(this.state.userInput)
      }
    
    
      handleSubmit(e, index) {
        e.preventDefault();
        const { todos, userInput } = this.state;
        this.setState({
          todos: [...todos, {
            text: userInput,
            key: Date.now(),
            editMode: false
    
          }],
          userInput: ''
        }
        )
      }
    
      handleDelete(index) {
        const todos = [...this.state.todos];
        todos.splice(index, 1);
        this.setState({
          todos
        })
      }
    
      handleEdit(index) {
        const todos = [...this.state.todos];
        console.log(todos.text)
      }
    
      render() {
        return (
    
          < div >
            <form onSubmit={(e) => this.handleSubmit(e)}>
              <input
                type="text"
                class="form-control mb-2"
                placeholder="enter a todo..."
                onChange={(e) => this.handleChange(e.target.value)}
                value={this.state.userInput}
              />
              <button type="submit" class="btn btn-primary">Submit</button>
            </form>
    
            <ul class="list-group">
    
              {this.state.todos.map((todos, index) => (
    
                this.state.editMode[index] ?
                  <div>
                    <input type="text" defaultValue={todos.text} />
                  </div>
                  :
    
    
                  <li
                    key={todos.key}
                    class="list-group-item"
                    onDoubleClick={(index) => this.handleEdit(index)}>
                    {todos.text}
                    <div class="delButton">
                      <button class="btn btn-danger" onClick={(index) => this.handleDelete(index)}>Remove</button>
                    </div>
                  </li>
              )
              )
              }
    
            </ul>
          </div>
        )
      }
    }
    export default TodoListt;
    
  • 很酷的家伙

    你真的很亲密!我为您创建了一个沙箱:https : //codesandbox.io/s/practical-cache-52k52

    要使用todos对象,我们将使用map函数创建要编辑的todo的新实例。

    import React from "react";
    import { isTemplateElement, tsStringKeyword } from "@babel/types";
    
    class TodoListt extends React.Component {
      state = {
        userInput: "",
        todos: [],
        editMode: false
      };
    
      handleChange(e, index) {
        this.setState({
          userInput: e
        });
      }
    
      handleSubmit(e, index) {
        e.preventDefault();
        const { todos, userInput } = this.state;
        this.setState(
          {
            todos: [
              ...todos,
              {
                text: userInput,
                key: Date.now(),
                editMode: false
              }
            ],
            userInput: ""
          },
          () => console.log(this.state)
        );
      }
    
      handleDelete(index) {
        const todos = [...this.state.todos];
        todos.splice(index, 1);
        this.setState({
          todos
        });
      }
    
      handleEdit(index) {
        const todos = [...this.state.todos];
        const updatedTodos = todos.map((todo, todoIndex) => {
          if (index == todoIndex) {
            return {
              ...todo,
              editMode: true
            };
          } else {
            return todo;
          }
        });
        this.setState(
          {
            ...this.state,
            todos: updatedTodos
          },
          () => console.log(this.state)
        );
      }
    
      handleUpdateChange = (e, index) => {
        const todos = [...this.state.todos];
        const updatedTodos = todos.map((todo, todoIndex) => {
          if (index == todoIndex) {
            return {
              ...todo,
              text: e.target.value
            };
          } else {
            return todo;
          }
        });
        this.setState({
          ...this.state,
          todos: updatedTodos
        });
      };
    
      handleUpdateSubmit(e, index) {
        e.preventDefault();
        const todos = [...this.state.todos];
        const updatedTodos = todos.map((todo, todoIndex) => {
          if (index == todoIndex) {
            return {
              ...todo,
              editMode: false
            };
          } else {
            return todo;
          }
        });
        this.setState(
          {
            ...this.state,
            todos: updatedTodos
          },
          () => console.log(this.state)
        );
      }
    
      render() {
        return (
          <div>
            <form onSubmit={e => this.handleSubmit(e)}>
              <input
                type="text"
                class="form-control mb-2"
                placeholder="enter a todo..."
                onChange={e => this.handleChange(e.target.value)}
                value={this.state.userInput}
              />
              <button type="submit" class="btn btn-primary">
                Submit
              </button>
            </form>
    
            <ul class="list-group">
              {this.state.todos.map((todos, index) =>
                this.state.editMode[index] ? (
                  <div>
                    <input type="text" value={todos.text} />
                  </div>
                ) : todos.editMode ? (
                  <form onSubmit={e => this.handleUpdateSubmit(e, index)}>
                    <input
                      value={todos.text}
                      onChange={e => this.handleUpdateChange(e, index)}
                    />
                  </form>
                ) : (
                  <li
                    key={todos.key}
                    class="list-group-item"
                    onDoubleClick={() => this.handleEdit(index)}
                  >
                    {todos.text}
                    <div class="delButton">
                      <button
                        class="btn btn-danger"
                        onClick={index => this.handleDelete(index)}
                      >
                        Remove
                      </button>
                    </div>
                  </li>
                )
              )}
            </ul>
          </div>
        );
      }
    }
    export default TodoListt;
    

    本文收集自互联网,转载请注明来源。

    如有侵权,请联系 [email protected] 删除。

    编辑于
    0

    我来说两句

    0 条评论
    登录 后参与评论

    相关文章

    如何我访问我的构造函数中定义的字段?

    如何访问数组中的Meteor用户属性?

    如何为我的班级创建数组构造函数?

    如何在通常的JS函数中访问JQuery属性

    我如何在函数外部访问数组元素

    如何访问我在Angular 7中使用构造函数创建的对象数组

    如何为C ++数组中的特定对象调用函数?

    如何为数组中的每个元素运行函数

    如何访问数组中对象的属性并对数组进行排序?

    如何为数组中的每个属性调用此函数?反应本机

    如何在setInterval函数中访问SVG数据属性

    在F#中,如何访问函数的属性?

    我如何访问数组中的数组

    如何从数组中的对象访问属性?

    数组中的对象,我如何访问它们?

    我如何使用下标访问作为函数返回的指针的数组?

    如何在函数对象javascript中访问属性函数

    如何为数组中的每个对象添加属性?

    我们如何为动态打印的锚标记编写访问函数

    如何访问构造函数的属性?

    在 JavaScript 中,如何访问对象数组中的对象属性?

    如何从 Vue js 中的方法访问数组中的属性?

    我想在我的函数中访问 li 元素的 key 属性

    我如何访问数组中的数组

    如何访问数组中对象的属性

    Javascript:如何为对象数组中的对象属性设置值?

    我如何为python中的函数创建模板?

    我如何从其他函数访问主函数中的变量

    如何在我的应用程序中访问字典中的数组对象属性?