块点击事件
On Block Click Event
我有一个容器,它是一组按钮,但让我们将组件作为单个组件来观察。该组件有一个 onBlockClick
接收 id
去哪里。
我想将 id
转换为 registrationSomeContainer
。
我的问题是,如何从 onBlockClick
中寻址其他容器?
let registrationContainer = ({
i18n,
id,
name,
representative,
onBlockClick,
dispatch
}) => {
return (
<div>
<div
className="app_wrapper"
>
<Block
leftIcon="close"
lines={[
"Some",
representative
]}
onBlockClick(id)
/>
</div>
</div>
)
}
一种性能较差的方法是
const registrationContainer = ({
i18n,
id,
name,
representative,
onBlockClick,
dispatch
}) => {
return (
<div className="app_wrapper">
<Block
leftIcon="close"
lines={[
"Some",
representative
]}
onBlockClick={onBlockClick.bind(null, id)}
/>
</div>
);
}
更优化的代码可以是
const registrationContainer = ({
i18n,
id,
name,
representative,
onBlockClick,
dispatch
}) => {
return (
<div className="app_wrapper">
<Block
id={id} // Look: passing id
leftIcon="close"
lines={[
"Some",
representative
]}
onBlockClick={onBlockClick} // Look: not binding
/>
</div>
);
}
class Block extends Component {
handleClick = (e) => {
this.props.onBlockClick(this.props.id);
};
render() {
<div onClick={this.handleClick}>
</div>
}
}
为什么绑定方式不对
绑定 onBlockClick={onBlockClick.bind(null, id)}
使 onBlockClick
每次都获得新的引用,从而导致子组件重新呈现。从这里阅读更多内容 https://daveceddia.com/avoid-bind-when-passing-props/
我有一个容器,它是一组按钮,但让我们将组件作为单个组件来观察。该组件有一个 onBlockClick
接收 id
去哪里。
我想将 id
转换为 registrationSomeContainer
。
我的问题是,如何从 onBlockClick
中寻址其他容器?
let registrationContainer = ({
i18n,
id,
name,
representative,
onBlockClick,
dispatch
}) => {
return (
<div>
<div
className="app_wrapper"
>
<Block
leftIcon="close"
lines={[
"Some",
representative
]}
onBlockClick(id)
/>
</div>
</div>
)
}
一种性能较差的方法是
const registrationContainer = ({
i18n,
id,
name,
representative,
onBlockClick,
dispatch
}) => {
return (
<div className="app_wrapper">
<Block
leftIcon="close"
lines={[
"Some",
representative
]}
onBlockClick={onBlockClick.bind(null, id)}
/>
</div>
);
}
更优化的代码可以是
const registrationContainer = ({
i18n,
id,
name,
representative,
onBlockClick,
dispatch
}) => {
return (
<div className="app_wrapper">
<Block
id={id} // Look: passing id
leftIcon="close"
lines={[
"Some",
representative
]}
onBlockClick={onBlockClick} // Look: not binding
/>
</div>
);
}
class Block extends Component {
handleClick = (e) => {
this.props.onBlockClick(this.props.id);
};
render() {
<div onClick={this.handleClick}>
</div>
}
}
为什么绑定方式不对
绑定 onBlockClick={onBlockClick.bind(null, id)}
使 onBlockClick
每次都获得新的引用,从而导致子组件重新呈现。从这里阅读更多内容 https://daveceddia.com/avoid-bind-when-passing-props/