J'ai deux composants: Composant parent à partir duquel je veux changer l'état du composant enfant:
class ParentComponent extends Component {
toggleChildMenu() {
?????????
}
render() {
return (
<div>
<button onClick={toggleChildMenu.bind(this)}>
Toggle Menu from Parent
</button>
<ChildComponent />
</div>
);
}
}
Et composant enfant :
class ChildComponent extends Component {
constructor(props) {
super(props);
this.state = {
open: false;
}
}
toggleMenu() {
this.setState({
open: !this.state.open
});
}
render() {
return (
<Drawer open={this.state.open}/>
);
}
}
Je dois soit changer l' état ouvert du composant enfant à partir du composant parent, soit appeler toggleMenu () du composant enfant à partir du composant parent lorsque l'utilisateur clique sur le bouton dans le composant parent?
javascript
reactjs
torayeff
la source
la source
Réponses:
L'état doit être géré dans le composant parent. Vous pouvez transférer la
open
valeur vers le composant enfant en ajoutant une propriété.la source
classNames({ foo: true, bar: this.props.open });
// => 'foo' quand this.props.open = false et 'foo bar' quand this.props.open = true.toggle
au ChildComponent<ChildComponent open={this.state.open} toggle={this.toggleChildMenu.bind(this)} />
et appelerthis.props.toggle()
le composant enfantChildComponent
-><ChildComponent toggle={this.toggleChildMenu.bind(this)} />
Le composant parent peut gérer l'état de l'enfant en passant un accessoire à l'enfant et l'enfant convertit cet accessoire en état à l'aide de componentWillReceiveProps.
la source
getDerivedStateFromProps()
. Cependant, la réponse de Miguel suggérant d'utilisercomponentWillReceiveProps(props)
est disponible et a fonctionné comme un charme dans mon environnement.La réponse ci-dessus est partiellement correcte pour moi, mais dans mon scénario, je souhaite définir la valeur sur un état, car j'ai utilisé la valeur pour afficher / basculer un modal. J'ai donc utilisé comme ci-dessous. J'espère que cela aidera quelqu'un.
Référence - https://github.com/kriasoft/react-starter-kit/issues/909#issuecomment-252969542
la source
Vous pouvez envoyer une prop du parent et l'utiliser dans le composant enfant afin de baser les changements d'état de l'enfant sur les modifications de prop envoyées et vous pouvez gérer cela en utilisant getDerivedStateFromProps dans le composant enfant.
la source
Vous pouvez utiliser createRef pour modifier l'état du composant enfant à partir du composant parent. Voici toutes les étapes.
Créez une méthode pour modifier l'état dans le composant enfant.
2 - Créez une référence pour le composant enfant dans le composant parent à l'aide de React.createRef ().
3 - Attachez la référence au composant enfant en utilisant ref = {}.
4 - Appelez la méthode du composant enfant en utilisant this.yor-reference.current.method.
Composant parent
Composant enfant
la source