【问题标题】:Passing the value of a clicked element in a child component into a button in a parent component in react将子组件中单击的元素的值传递到父组件中的按钮中
【发布时间】:2021-11-29 14:45:30
【问题描述】:

我有两个组件,一个父组件和一个子组件。此子组件位于父组件内。在子组件内部,有一个标签,当它被点击时,一个值被存储在一个单独的状态中,现在当一个父组件内的按钮被点击时,应该打印存储在子组件状态中的值到控制台。

下面有什么


// import Checboxtest from "./Checkboxtest";
import "./styles.css";

const Child = ({ showresult, click }) => {
  const [clickedvalue, setClickedValue] = useState("");

  const ItemClicked = (e) => {
    setClickedValue("Yes");
    console.log(clickedvalue);
  };

  return (
    <div className="App">
      <h1>Checkbox Value </h1>

      <span onClick={ItemClicked}>
        <input type="checkbox" /> clik me
      </span>
    </div>
  );
};

export default function Parent() {
  const [clickedvalue, setClickedValue] = useState("");
  return (
    <div className="App">
      <h1>
        When clicked on the button below, the value of the checkbox inside the
        child component should be display on the console.
      </h1>
      <button
        onCick={() => {
          console.log(clickedvalue);
        }}
      >
        See checkbox value
      </button>
      <Child clickedvalue={clickedvalue} setClickedValue={setClickedValue} />
    </div>
  );
}

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

这被称为提升状态。 clickedValue useState 应该在 Parent 组件中,然后它应该传递给 Child 组件 &lt;Child clickedValue={clickedValue}/&gt;。 在这种情况下,由于 onClick 函数位于子组件中,您还应该传递 setter 方法 &lt;Child clickedValue={clickedValue} setclickedvalue={setclickedvalue}/&gt;.

编辑 #1 - 查看代码后,我看到了多个小问题 就像在 onClick 被拼写为 onCiked 一样

这是修改后的工作代码

const Child = ({clickedvalue, showresult, setClickedValue }) => {
  
  const ItemClicked = (e) => {
    setClickedValue(e.target.checked);
  };

  return (
    <div className="App">
      <h1>Checkbox Value </h1>

      <span onClick={ItemClicked}>
        <input type="checkbox" value={clickedvalue}/> clik me
      </span>
    </div>
  );
};


const Parent = () => {
  const [clickedvalue, setClickedValue] = useState(false);

  return (
    <div className="App">
      <h1>
        When clicked on the button below, the value of the checkbox inside the
        child component should be display on the console.
      </h1>
      <button onClick={()=>{console.log(clickedvalue)}}>See checkbox value</button>
      <Child clickedvalue={clickedvalue} setClickedValue = {setClickedValue}/>
    </div>
  );
}```



【讨论】:

  • @Abdasihsn 我将上面的代码编辑为我目前所拥有的,请它仍然不起作用。父组件内的按钮仍然不起作用
  • 按照你的方法@Tarun,我将在哪里声明我的 setclickedvalue ?父组件或子组件
  • 嘿,看到这条评论,我已经编辑了我的答案,看看@slife
【解决方案2】:

您应该按如下方式提升Child 组件的状态:

const Child = ({ showresult, setClickedValue }) => {
  
  const ItemClicked = (e) => {
    setclickedvalue("Yes");
    console.log(clickedvalue);
  };

  return (
    <div className="App">
      <h1>Checkbox Value </h1>

      <span onClick={ItemClicked}>
        <input type="checkbox" /> clik me
      </span>
    </div>
  );
};

export default function Parent() {
  const [clickedvalue, setclickedvalue] = useState("");

  return (
    <div className="App">
      <h1>
        When clicked on the button below, the value of the checkbox inside the
        child component should be display on the console.
      </h1>
      <button onCick={()=>{console.log(clickedvalue)}}>See checkbox value</button>
      <Child  setClickedValue = {setClickedValue}/>
    </div>
  );
}

【讨论】:

  • 在@Abdasihsn 尝试了所有解决方案后仍然无法正常工作
  • @Tarun 这还是不行
  • 您是否遇到任何错误?请分享结果,以便我检查它
猜你喜欢
  • 2021-06-11
  • 2018-12-24
  • 1970-01-01
  • 2020-02-21
  • 2022-01-25
  • 2021-10-30
  • 2020-09-25
  • 2019-07-12
相关资源
最近更新 更多