Laut den Kommentaren können Sie die Requisiten nicht direkt ändern, da sie unveränderlich sind.
Allerdings denke ich, ich habe eine einfache Lösung für dieses Problem. Ich habe keine Ahnung, welche Bibliothek das ist oder wie es funktioniert, also dies kann oder kann nicht funktionieren. Dies ist jedoch eine allgemeine Antwort darauf, wie Sie eine Requisite entfernen, bevor eine Komponente bereitgestellt wird.
Davon abgesehen, würde ich versuchen, meine eigene Komponente zu schaffen, die eine macht <Button />
:
class MyButtonComponent extends React.Component {
...
render() {
return <Button onClick={this.props.onClickHandler} />;
}
}
Dann in der Komponente, die Sie Ihre Erweiterungen zu tun:
render() {
<AsyncContainer>
<MyButtonComponent onClickHandler={this.asyncStuff} asyncHandler="onClick"/>
</AsyncContainer>
}
diese Weise können Sie pflegen Ihr onClick
Eventlistener auf der <Button />
Komponente, aber Sie nicht die illegale asyncHandler
Requisite passieren.
Edit:
Alternativ können Sie auch tun:
class MyButtonComponent extends React.Component {
...
componentWillMount() {
let newProps = this.props;
delete newProps.asyncHandler;
this.setState({properties: newProps}):
}
render() {
return <Button {...this.state.properties} />;
}
}
Diese alle Requisiten gelten (mit spread operator) zu <Button />
Ausnahme asyncHandler
, die wir vor löschen zu Die Komponente wird montiert, indem eine Kopie der props
in state
aber mit asyncHandler
erstellt wird.
Überprüfen Sie auch this answer Ich gab eine ähnliche Frage.
'props' in Reaktion unveränderlich ist und somit nicht von der Komponente selbst verändert werden kann. Das übergeordnete Element muss den 'prop 'ändern und dann an die Komponente übergeben. – Dan
Sie können nichts mit Requisiten im Kind tun, weil sie schreibgeschützt sind: https: //facebook.github.io/react/docs/components-and-props.html # props-are-read-only –
Vielleicht könnten Sie das Kind klonen und das Eigenschaftsobjekt irgendwie ersetzen? – AnAmuser