You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现仅在勾选列表项复选框时显示删除按钮的React功能

需求说明

我正在尝试实现一个功能:渲染列表项、复选框和删除按钮,要求仅当勾选对应列表项的复选框时,才显示该列表项的删除按钮。以下是我的React代码实现:


React 代码实现

JavaScript 部分

const { StrictMode, useEffect, useState } = React;
const { createRoot } = ReactDOM;

// const getData = () => {
//   fetch("https://jsonplaceholder.typicode.com/todos")
//     .then((res) => res.json())
//     .then((data) => console.log([data]));
// };

const arr = ["Play Cricket", "Play Video Game", "Read Books", "Watch Movies"];

function App() {
  const [isChecked, setIsChecked] = useState([]);
  const [baseArr, setBaseArr] = useState(arr);

  // const handleDelete = () => {

  // }
  // useEffect(() => {
  //   getData();
  // });

  const isItemChecked = (item) => {
    return isChecked.includes(item);
  };

  const handleChecked = (e) => {
    let updatedList = [...isChecked];

    if (e.target.checked) {
      updatedList = [...isChecked, e.target.value];
    } else {
      updatedList.splice(isChecked.indexOf(e.target.value), 1);
    }
    setIsChecked(updatedList);
  };

  console.log("isChecked", isChecked);
  console.log("baseArr", baseArr);

  const handleDelete = (e) => {
    const filterValue = arr.filter((val) => val !== e);
    setIsChecked(isChecked.filter((val) => val !== e));
    setBaseArr(filterValue);
  };

  return (
    <div className="App">
      <ul>
        {baseArr.map((val, index) => (
          <li
            style={{ listStyleType: "none", display: "flex", gap: "20px" }}
            key={index}
          >
            <input
              type="checkbox"
              value={val}
              onClick={(e) => handleChecked(e)}
            />
            <h1>
              {val}{" "}
              {isItemChecked(val) && (
                <button
                  style={{
                    backgroundColor: "red",
                    width: "150px",
                    height: "50px"
                  }}
                  onClick={() => handleDelete(val)}
                >
                  Delete
                </button>
              )}
            </h1>
          </li>
        ))}
      </ul>
    </div>
  );
}

const root = createRoot(document.getElementById("root"));
root.render(<StrictMode><App /></StrictMode>);

CSS 部分

.App {
  font-family: sans-serif;
  text-align: center;
}

HTML 部分

<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<div id="root"></div>

内容的提问来源于stack exchange,提问作者Aatif Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:11:21