2 votes

Comment faire passer une fonction à travers un composant React pour le partage de données entre parent et enfant ?

J'ai suivi ce tutoriel ( https://www.freecodecamp.org/news/pass-data-between-components-in-react/ ) du mieux que je peux, mais j'ai toujours des problèmes.

J'obtiens l'erreur suivante :

Uncaught TypeError: childToParent is not a function"

Voici la fonction parentale :

function App() {
const childToParent =(value) => {console.log(value)}
...
return (
...
  <SelectHours value={state.selectedHour} childToParent={childToParent}></SelectHours>
...
)

et la fonction enfant :

export default function SelectHours(selectedHours, childToParent) {
....
return (
<Select
  labelId="select-demo"
  id='select-demo'
  defaultValue=""
  //onChange={event => handleChange(event.target.value, true)}
  value={workHours[0] ? workHours[0] : ""}
>
  {
    workHours.map((value, index) => {
      return (
        <MenuItem
          value={value ? value : ""}
          key={index}
          onClick={() => childToParent(value)}
        >
          {value}
        </MenuItem>
      )
    })
  }
</Select>
)
....
}

2voto

Haruna Oseni Points 36

Tu dois ajouter tes accolades pour que la réaction puisse dire que c'est un accessoire.

export default function SelectHours({selectedHours, childToParent}) {
....
return (
<Select
  labelId="select-demo"
  id='select-demo'
  defaultValue=""
  //onChange={event => handleChange(event.target.value, true)}
  value={workHours[0] ? workHours[0] : ""}
>
  {
    workHours.map((value, index) => {
      return (
        <MenuItem
          value={value ? value : ""}
          key={index}
          onClick={() => childToParent(value)}
        >
          {value}
        </MenuItem>
      )
    })
  }
</Select>
)
....
}

2voto

saleh shokouhi Points 42

Doit détruire les accessoires comme ça.

export default function SelectHours({selectedHours, childToParent})

ou utiliser des props comme ceci

    export default function SelectHours(props)
      ...
    onClick={() => props.childToParent(value)}

Pour en savoir plus sur la déstructuration des objets, lisez cet article

https://dmitripavlutin.com/javascript-object-destructuring/

1voto

Shubham Sogi Points 64

Vous devez avoir un gestionnaire pour ChildToParent à l'intérieur de

function App() {
...
const childToParent =(value) => {console.log(value)}
return (
...
  <SelectHours value={state.selectedHour} childToParent={childToParent}></SelectHours>
...
)

le composant App

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X