【问题标题】:Adding a new task for todo with render function react使用渲染功能为 todo 添加新任务 react
【发布时间】:2018-08-13 06:57:58
【问题描述】:

所以我尝试使用 true 和 false 布尔值来呈现我的待办事项列表的编辑按钮。

我的想法是如果单击编辑按钮 -> 编辑 == true -> 显示渲染编辑()。如果编辑为假,则显示 renderNormal()。

现在,当用户单击编辑时,它会显示 renderEdit() 页面,但是,所有列表也显示 textform.. 查看图片

这是我认为是问题的 renderEditing() 代码...

renderEditing() {
    return (
        <div>
          <h1>My awesome todo list</h1>
          <label htmlFor="newTodoDescription">Add Todo</label>
          <input
            type="text"
            value={this.state.newTodoDescription}
            name="newTodoDescription"
            id="newTodoDescription"
            onChange={this.handleOnChange}
          />
          <button onClick={this.handleAddTodo}>+</button>

          <ul>
          {this.state.todos.map(todo => {

            return (
              <li
                onClick={() => this.handleTodoClick(todo)}
                id= {todo.id}
                >

                {todo.description}

      <textarea ref ="editTodoDescription"
defaultValue = {this.state.todo}
name= "editTodoDescription"
id ="editTodoDescription"
></textarea>


                <button onClick={() => this.handleSave(todo)} > save 
</button>          
</li>


            );
          }

          )
          }
          </ul>


        </div>
      ); 
}

更新了 todo 的 textarea 值,但是当我单击一个按钮的编辑时,仍然显示两个...

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    this.state.todo 不存在。只需将 defaultValue 设置为 todo

      renderEditing() {
        return (
          <div>
            <h1>My awesome todo list</h1>
            <label htmlFor="newTodoDescription">Add Todo</label>
            <input
              type="text"
              value={this.state.newTodoDescription}
              name="newTodoDescription"
              id="newTodoDescription"
              onChange={this.handleOnChange}
            />
            <button onClick={this.handleAddTodo}>+</button>
    
            <ul>
              {this.state.todos.map(todo => {
                return (
                  <li onClick={() => this.handleTodoClick(todo)} id={todo.id}>
    
                    <textarea
                      ref="editTodoDescription"
                      defaultValue={todo.description}
                      name="editTodoDescription"
                      id="editTodoDescription"
                    />
    
                    <button onClick={() => this.handleSave(todo)}> save</button>
                  </li>
                );
              })}
            </ul>
          </div>
        );
      }
    

    【讨论】:

    • 编辑时仍显示两个文本区域。你知道可能是什么原因吗?
    • 每个项目有两个文本区域?
    • 是的,当我单击一个编辑按钮时会显示两个文本区域
    • 在屏幕截图中,我只能在每个项目的 textarea 上看到。你指的另一个是什么。可以再上传一张截图吗?
    • 更新了我的答案。希望对您有所帮助。
    猜你喜欢
    • 2020-01-06
    • 2019-10-28
    • 2022-11-29
    • 2020-07-23
    • 1970-01-01
    • 2021-02-14
    • 2018-08-30
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多