Je suis nouveau pour réagir. J'ai une application de réaction avec plusieurs composants de classe et des composants sans classe. J'ai deux composants suivants et je dois envoyer une donnée ("projectID" dans ce cas) du composant enfant au composant parent. Mon composant enfant est un composant sans classe. Je sais que je peux faire cela dans les composants de classe comme suit
import project from './project'
class ProjectList extends React.Component {
render() {
return (
<div>
{() => (
<project
// How to setup "get id from child" here?
/>
)}
</div>
));
}
}
Mais j'ai un composant enfant sans classe
Composant enfant:
const sendId = (id) => {
// How to setup "send id to parent" here?
}
const project = ({ task }) => (
<div onClick={() => sendId(task.projectID)} >
{task.projectID}
</div>
)
export default project
4 Réponses :
Si je comprends votre question, vous pouvez accéder à l ' id transmis à sendId () à partir du composant ProjectList en passant un accessoire de rappel à dans la méthode de rendu ProjectList comme ceci:
const project = ({ task, onSendId }) => (
{/* Pass the onSendId callback into project, and call this from onClick */}
<div onClick={() => onSendId(task.projectID)} >
{task.projectID}
</div>
)
Ce changement nécessiterait alors que vous mettiez à jour le projet afin que la prop de rappel soit appelée lorsque le gestionnaire onClick est appelé:
class ProjectList extends React.Component {
render() {
return (
<div>
{/* pass onSendId callback prop, and console log when it's invoked */}
<project onSendId={ (theId) => { console.log(`sent id: ${theId}`); } } />
</div>
));
}
}
J'espère que cela aide!
p>
Donnez simplement la méthode du parent au composant enfant et utilisez props.xxx () .
Vous pouvez transmettre un rappel que vous définissez dans votre composant parent à vos
accessoires de composant enfant.
composant enfant:
import project from './project'
class ProjectList extends React.Component {
sendIdHandler = (projectId) => {
//put your logic here
}
render() {
return (
<div>
<project sendId={this.sendIdHandler} />
</div>
));
}
}
parent composant:
const project = ({ task, sendId }) => (
<div onClick={() => sendId(task.projectID)} >
{task.projectID}
</div>
)
export default project
Tout ce que vous avez à faire est de transmettre une fonction au composant enfant qui accepte l'ID.
Composant parent
const project = ({ task }) => (
<div onClick={this.props.getDataFn(task.projectID)} >
{task.projectID}
</div>
)
Enfant Composant
class ProjectList extends React.Component {
getChildData = (id) => {/* do something */ }
render() {
return (
<div><Project getDataFn={this.getChildData}</div>
));
}
}
Bonne réaction :)
Vous ne devriez pas dire this.props.getDataFn dans le composant enfant?