javascript - 如何在 ReactJS 中调用 Wrapper(父)方法
问题描述
我无法解决这个问题。我想Wrapper.onClickHandler
从元素调用方法,li
因为我想通过Wrapper
组件处理点击操作。这可能吗?
class CallA extends Component {
onClickHandler() {
console.log('Call A Clicked');
}
render() {
return (
<ul className="call_a">
{this.props.children}
</ul>
);
}
}
class CallB extends Component {
onClickHandler() {
console.log('Call B Clicked');
}
render() {
return (
<ul className="call_b">
{this.props.children}
</ul>
);
}
}
class List extends Component {
render() {
const listType = props.listType;
const WrapperComponents = {
a: CallA,
b: CallB
}
const Wrapper = WrapperComponents[listType];
const Options = []
for( const key in {a:1,b:2} ){
Options.push(
<li key={key} onClick={Wrapper.onClickHandler}>{key}</li>
)
}
return (
<Wrapper>
{Options}
</Wrapper>
);
}
}
解决方案
有条件地调用不同的组件。
const ComponentA = () => {
const doSomething = () => {
console.log('Dosomething in componentA')
}
return <li onClick={doSomething()} />
}
const ComponentB = () => {
const doSomething = () => {
console.log('Dosomething in componentB')
}
return <li onClick={doSomething()} />
}
class Wrapper extends Component {
render() {
return (
<ul>
<List />
</ul>
);
}
}
class List extends Component {
render() {
return (
<>
{ Object.keys({a:1, b:2}).map(key => {
return key === 'a' ? <ComponentA /> : <ComponentB />
}
</>
);
}
}
推荐阅读
- tsql - 标记排序后连续出现两次的值
- python - 从 tkinter 按钮获取价值
- javascript - Symfony 5 与 Pusher 的私人聊天
- html - 如何突出显示当前部分
- c# - 连接/令牌端点给了我 400 错误请求(invalid_client)
- php - 无法在 XAMPP 控制面板上安装 MySQL
- ios - 如何使用 Xamarin 表单在 iOS iPhone 中的相册内创建文件夹
- java - VS 代码编译每个
.java 文件在我不想要的文件夹中 - java - 有没有办法从firestore将资源设置为XML文件?
- database - F#查询:在每组中查找具有最大值的行