Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用useState打开数组中的单个元素_Javascript_Reactjs - Fatal编程技术网

Javascript 使用useState打开数组中的单个元素

Javascript 使用useState打开数组中的单个元素,javascript,reactjs,Javascript,Reactjs,我有一个映射列表,其中包含另一个也映射的组件。 我要做的是切换一行以显示子组件中的数据 LaneInfo.jsx 使用onClick函数,可以隐藏已单击的div 但是,正如您在我的演示中看到的,当我单击行时,两个项目要么打开,要么关闭 我认为这需要我从Data.js中获取行的唯一id,因为这是我映射行的方式,但我还没有弄清楚。您最好创建一个单独的车道组件,让它管理自己的状态: import React, { useState, useEffect } from "react"; import d

我有一个映射列表,其中包含另一个也映射的组件。 我要做的是切换一行以显示子组件中的数据

LaneInfo.jsx 使用onClick函数,可以隐藏已单击的div

但是,正如您在我的演示中看到的,当我单击行时,两个项目要么打开,要么关闭


我认为这需要我从Data.js中获取行的唯一id,因为这是我映射行的方式,但我还没有弄清楚。您最好创建一个单独的车道组件,让它管理自己的状态:

import React, { useState, useEffect } from "react";
import data from "./data.js";
import CarContainer from "./CarContainer";

const Lane = ({
  lane
}) => {
  const [showLane, setShowLane] = useState(false);

  return (
    <>
      <div className="lane" onClick={() => setShowLane(!showLane)}>
        <div className="space" key={lane.name}>
          <div>{lane.name}</div>
          <div>{lane.type}</div>
        </div>
      </div>
      {showLane && <CarContainer data={lane.cars} />}
    </>
  );
};

const LaneInfo = () => {
  const laneData = data.lanes;

  return (
    <>
      {laneData.map(lane => (
        <Lane lane={lane} />
      ))}
    </>
  );
};
export default LaneInfo;

谢谢你这么简单的解决方案。我在网上看到了一些其他的答案,但它们让问题变得比这复杂得多。没问题。最好保持组件尽可能小,这样在很多时候,这些问题就会消失
import React, { useState, useEffect } from "react";
import data from "./data.js";
import CarContainer from "./CarContainer";

const Lane = ({
  lane
}) => {
  const [showLane, setShowLane] = useState(false);

  return (
    <>
      <div className="lane" onClick={() => setShowLane(!showLane)}>
        <div className="space" key={lane.name}>
          <div>{lane.name}</div>
          <div>{lane.type}</div>
        </div>
      </div>
      {showLane && <CarContainer data={lane.cars} />}
    </>
  );
};

const LaneInfo = () => {
  const laneData = data.lanes;

  return (
    <>
      {laneData.map(lane => (
        <Lane lane={lane} />
      ))}
    </>
  );
};
export default LaneInfo;