如何与 React 组件共享 属性?
How to share a property with React components?
我是 React 的新手,我对从一个组件到另一个组件共享属性有疑问。例如,我想要一个具有 "visible" 函数的父组件,我可以将其传递给其他子组件。
示例:
CustomInput visible="true";
CustomDropDown visible="false"
我想知道执行此操作的最佳方式,尊重良好做法。感谢您的帮助!
真的很简单。您可以将方法作为道具传递。假设你有一个父组件,或者高阶组件 (HOC),你可以这样做:
class Parent extends React.Component {
logWord = (word) => {
console.log(word);
}
render () {
return <ChildComponent handleLogging={ this.logWord } />
}
}
然后,在 ChildComponent 中,您只需访问 props 中的方法。例如:
class ChildComponent extends React.Component {
render () {
return (
<div onClick={ this.props.handleLog.bind(null, 'Logged!') }>Click me to log a word!</div>
}
}
}
因此,在您的示例中,如果您想要一个存在于父级的方法来更新状态的可见性属性,您可以这样写:
class Parent extends React.Component {
constructor () {
this.state = {
visible: false
}
}
setVisible = (bool) => {
this.setState({ visible: bool });
}
render () {
return <ChildComponent updateVisible={ this.setVisible } visible={ this.state.visible } />;
}
}
子组件:
class ChildComponent extends React.Component {
render () {
return (
<div>
<div onClick={ this.props.updateVisible.bind(null, true) }>Set me to visible!</div>
<div onClick={ this.props.updateVisible.bind(null, false) }>Set me to invisible!</div>
{ this.props.visible && <div>I'm visible right now!</div> }
</div>
}
}
}
我是 React 的新手,我对从一个组件到另一个组件共享属性有疑问。例如,我想要一个具有 "visible" 函数的父组件,我可以将其传递给其他子组件。
示例:
CustomInput visible="true";
CustomDropDown visible="false"
我想知道执行此操作的最佳方式,尊重良好做法。感谢您的帮助!
真的很简单。您可以将方法作为道具传递。假设你有一个父组件,或者高阶组件 (HOC),你可以这样做:
class Parent extends React.Component {
logWord = (word) => {
console.log(word);
}
render () {
return <ChildComponent handleLogging={ this.logWord } />
}
}
然后,在 ChildComponent 中,您只需访问 props 中的方法。例如:
class ChildComponent extends React.Component {
render () {
return (
<div onClick={ this.props.handleLog.bind(null, 'Logged!') }>Click me to log a word!</div>
}
}
}
因此,在您的示例中,如果您想要一个存在于父级的方法来更新状态的可见性属性,您可以这样写:
class Parent extends React.Component {
constructor () {
this.state = {
visible: false
}
}
setVisible = (bool) => {
this.setState({ visible: bool });
}
render () {
return <ChildComponent updateVisible={ this.setVisible } visible={ this.state.visible } />;
}
}
子组件:
class ChildComponent extends React.Component {
render () {
return (
<div>
<div onClick={ this.props.updateVisible.bind(null, true) }>Set me to visible!</div>
<div onClick={ this.props.updateVisible.bind(null, false) }>Set me to invisible!</div>
{ this.props.visible && <div>I'm visible right now!</div> }
</div>
}
}
}