Ho un Editor
componente che si presenta in questo modo:React-JS: Metodo di accesso di un bambino attraverso HOC involucro
class EditorComp extends Component {
focus() {
this.refs.input.focus();
}
render() {
return (
<input
ref="input"
...
/>
);
}
}
modo che gli elementi che utilizzano EditorComp
possono impostare un ref e chiamare il suo metodo focus
e applicare messa a fuoco l'ingresso di livello inferiore, in questo modo:
class Parent extends Component {
render() {
return (
<div>
<button onClick={() => this.refs.editor.focus()}>Focus</button>
<EditorComp ref="editor" />
</div>
);
}
}
Tuttavia, se sono EditorComp
in una componente di ordine superiore (come react-redux
s' connect()
) il EditorComp
perde metodo di messa a fuoco perché viene intrappolato sotto l'HOC.
Esempio:
const WrappedEditor = connect()(EditorComp); // react-redux's connect, for example
const wrappedEditorInstance = <WrappedEditor />;
wrappedEditorInstance.focus() // Error! Focus is not a function.
C'è un modo per passare fino metodo o componente riferimenti attraverso i Hocs controllanti di un componente figlio?
Modifica: O esiste una soluzione inversa in cui il genitore trasmette una funzione che imposta il comando di messa a fuoco? Ho preso in considerazione l'utilizzo di event-emitter
e l'ascolto del figlio di un evento focus
chiamato dal genitore, tuttavia questo sembra poco pratico e non necessario.
Grazie per la risposta! L'istanza di ricomp di '1 modo per restituire 'è quasi perfetta, tuttavia sembra che la' posizione di passaggio 2 verso il basso' potrebbe non funzionare come previsto. Il 'EditorComp' proverà a rubare lo stato attivo ogni volta che si aggiorna finchè' this.props.isfocus === true'. Questo probabilmente può essere affrontato, ma dovrebbe essere notato. Grazie ancora! –