reactjs - 如何在单击时惯用地将文本组件转换为输入组件?

标签 reactjs

我正在 React 创建一个待办事项应用程序,它基本上只是一个按类别分组的项目列表。我想添加功能,以便当我单击单个待办事项(这是一个段落)时,它会显示一个带有我可以编辑和保存的当前文本的输入。如何在不手动编辑 DOM 的情况下做到这一点?

代码: 单个待办事项:

import React from 'react';

const Item = props => {
  return (
    <div
      className={`item${props.item.purchased ? ' purchased' : ''}`}
      onClick={() => props.toggleItem(props.item.id)}
    >
      <p>{props.item.name}</p>
    </div>
  );
};

export default Item;

我想将切换更改为单选按钮并单击以编辑待办事项。 sample image of todos

最佳答案

首先,您需要一个用于更新 item.name 的 prop(当您编辑输入时需要这个)

您没有很好地解释您希望它如何工作,所以我做了一个示例,您单击文本将其编辑为文本输入,并且还有一个按钮来保存编辑.

const Item = props => {
  const [isEditing, setIsEditing] = useState(false);

  return isEditing ? (
    <div>
      <input
        value={props.item.name}
        onChange={e => props.setItemName(e.target.value)}
      />
      <button onClick={() => setIsEditing(false)}>Stop Editing</button>
    </div>
  ) : (
    <div
      className={`item${props.item.purchased ? " purchased" : ""}`}
      onClick={() => setIsEditing(true)}
    >
      <p>{props.item.name}</p>
    </div>
  );
};

我还创建了一个工作 codesanbox与您想要的行为。

关于reactjs - 如何在单击时惯用地将文本组件转换为输入组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58085347/

相关文章:

javascript - React Flux 库 Alt 使用 React 的状态吗?

javascript - 为什么在我的 ant design 中 defaultOpenKeys 不起作用?

javascript - 如何在 React Native 中访问 json 对象的字符串

javascript - 在 GraphQL 中搜索具有特定字符串的特定结果

javascript - 为什么状态在 nextjs 中没有被解析为变量

reactjs - 我们可以将sectionList(或scrollView)的粘性标题粘贴到 ScrollView 顶部的相对位置吗?

reactjs - 样式化组件 - 将 Prop 传递给 GlobalStyle

javascript - 使用循环渲染 JSX 会出现语法错误

node.js - 开发中需要在 "/static"前追加子目录

reactjs - React 什么时候创建一个新的组件实例?