react-props - 如何使用功能组件将选定的道具传递给孩子的孩子
问题描述
我无法将功能从一个组件传递给它的孩子的孩子。起初我使用以下方法:
这是我的父组件:
function MainComponent() {
const doSomething = () => {
//do something
};
const doSomethingElse = () => {
//do something
};
return (
<>
<form>
<CustomComponent state={currentState} doSomething={doSomething} doSomethingElse={doSomethingElse} />
<button>send</button>
</form>
</>
);
};
export default MainComponent;
这是父母的孩子:
function CustomComponent(props) {
const {doSomething, doSomethingELse} = props;
return (
<>
<div className="container">
<div className="options">
<div className="option">
<Selection className="radio" type="radio" id="one" name="category" doSomething={doSomething} />
</div>
<div className="option">
<Selection className="radio" type="radio" id="two" name="category" doSomething={doSomething} />
</div>
<div className="option">
<Selection className="radio" type="radio" id="three" name="category" doSomething={doSomething} />
</div>
<div className="option">
<Selection className="radio" type="radio" id="four" name="category" doSomething={doSomething} />
</div>
</div>
<div className="selected">
<Selection className="radio" type="radio" id="category" name="menu" doSomethingELse={doSomethingELse} />
</div>
</div>
</>
);
};
export default CustomComponent;
这是孩子的孩子:
function Selection(props) {
const {doSomething, doSomethingElse} = props;
useEffect(() => {
doSomething();
}, [id, doSomething]);
useEffect(() => {
doSomethingElse();
}, [name, doSomethingElse]);
//
const changeHandler = event => {
//SOME LOGIC
};
const clickHandler = event => {
//SOMELOGIC
};
const element =
<input
className={props.className}
type={props.type}
id={props.id}
name={props.name}
onChange={changeHandler}
onClick={ClickHandler}
/>
return(
<>{element}</>
);
};
export default Selection;
渲染我的主要组件时,出现以下错误:
TypeError: onTouch is not a function
我的怀疑是我错误地将道具从子组件传递给了它的子组件,经过一些研究,我发现如果我将道具从子组件传递给它的子组件,{...props}
而不是doSomething={doSomething}
并且doSomethingElse={doSomethingElse}
一切正常。
但我不想将这两个函数都传递给每个孩子,我只是一个传递一个,而且我无法弄清楚如何去做。
有人可以解释一下这是如何实现的吗?
解决方案
除了节点或子组件的子组件外,您的程序中的一切都很好,因为您已经解构了节点组件中的 doSomething 和 doSomethingElse 并且一次仅传递其中一个,这意味着其中一个将始终未定义。假设如果你传递 doSomething 那么 doSomethingElse 将是未定义的,然后当你将它传递给 useEffect 时它会产生一个错误
推荐阅读
- apache-spark - Spark 应用程序 - 管理依赖项 jar
- javascript - 以正确的方式使用jquery动态添加输入
- python - 使用 MaskRcnn 从 model.detect() 之后的图像中获取预测掩码的 x,y 坐标
- oop - Dart 子类型和方法参数
- vue-router - 允许路由器防护中的 2 个组件
- docker - 使用动态 docker 代理时如何构建 docker 映像?
- java - 如何确保正确封装字段?
- c++ - 为什么我在数组中输入了一定数量的字母后程序就结束了?
- android - 如何在颤动中仅对一个小部件使用 setState 方法?
- vb.net - 为什么我的 pascals_triangle 数组没有充当二维列表,因此给了我太多参数错误?