reactjs 列表中组件的状态

knsnq2tg  于 2023-04-29  发布在  React
关注(0)|答案(2)|浏览(143)

我得到了一个包含2个react组件的列表,它们的初始颜色是黑色。
目标是下一个,当我点击一个组件时,如果它是橙子的,我想将前一个组件的状态设置为黑色。我试过useState钩子,但没有太大的成功。如果有人能给予我一些提示,那将是完美的。

const Square = () => {

const [actualColor, setColor] = useState("black") 
const onClickEnterHandler = () => setColor("orange")

return(
    <div>
    </div>
    )
}

export default Square
dgtucam1

dgtucam11#

如果我理解正确的话,当点击方块2时,你希望方块1是黑色的,方块2(当前活动的方块)是橙子的。
如果是,那么试试:

const Parent = () => {
  const [activeIndex, setActiveIndex] = useState(null);

  // Callback function to be passed down to Square component
  const onSquareClick = (index) => {
    setActiveIndex(index);
  };

  const myTwoSquares = [0, 1].map((i) => (
    <Square
      index={i}
      active={i === activeIndex} // This is important
      onClick={onSquareClick}
      key={i}
    />
  ));

  return <div>{myTwoSquares}</div>;

然后在Square组件中,您可以有条件地检查active属性并将活动Square设置为橙子。

const Square = ({ index, active, onClick }) => {
  const actualColor = active ? "orange" : "black";
  const onSquareClick = () => {
    onClick(index);
  };
return (
    <div
     onClick={onSquareClick}
     style={{ backgroundColor: actualColor}}
    ></div>  );
g9icjywg

g9icjywg2#

如果你想改变多个组件,你必须将你的状态移动到它们的公共父节点,并将状态作为prop传递或使用React Context。

const Parent = () => {
   const [color, setColor] = useState('black')
   const changeColor = () => setColor("orange")
   return (
     <>
       <Square color={color} changeColor={changeColor} />
       <Square color={color} changeColor={changeColor} />
     </>
)}

const Square = ({color, changeColor}) => {

  return(
    <div onClick={changeColor} style={{color: color}}>
      content
    </div>
  )
}

相关问题