Необработанное отклонение (ошибка типа): getNotes не является функцией в react?

#reactjs

Вопрос:

я учусь реагировать, поэтому я создал простое приложение для управления заметками с заголовком и описанием.

Я создаю функцию getNotes в Note.js файл и я передали функцию getNotes компоненту NoteForm и NoteList.

getNotes отлично работает в компоненте NoteForm, но не работает в компоненте NoteList. Функция getNotes() используется для обновления списка заметок. пожалуйста, скажите мне, почему функция getNotes() не работает в списке заметок

Note.js

     function Notes() {
  const [notes, setNotes] = useState([]);

   const getNotes = async () => {
    const notesRes = await axios.get("http://localhost:5000/notes/");   
    setNotes(notesRes.data);
    console.log(notes);
  }

  useEffect(() => {
    getNotes();
  }, []);

  return (
    <div>
      <NoteForm getNotes={getNotes} />
      <NoteList notes={notes} getNotes = {getNotes}/>
        
    </div>
  );
}

export default Notes;

 

Noteform.js

 function NoteForm({ getNotes }) {
  const [Title, setTitle] = useState("");
  const [description, setDesc] = useState("");
 
  async function saveNote(e) {
    e.preventDefault();

    try {
      const noteData = {
        title: Title,
        desc: description,
      };
      await axios.post("http://localhost:5000/notes/", noteData);
      getNotes();
      
      setTitle(''); setDesc('');
      
    } catch (err) {
      console.error(err);
    }
  }

  return (...);
}

export default NoteForm;

 

NoteList.js

 function NoteList({notes}, {getNotes}) {
  //------------Delete-----------
  async function delNote (id) {
    await axios.delete(`http://localhost:5000/notes/${id}`);
    getNotes();
    
  }

  //------------Update-----------

  const [open, setOpen] = React.useState(false);
  const [UpdateTitle, setUpdateTitle] = useState("");
  const [UpdateDescription, setUpdateDescription] = useState("");

  const handleClickOpen = (title, desc) => {
    setUpdateTitle(title);
    setUpdateDescription(desc);
    setOpen(true);
  };

  async function updateNote(id, updatetitle, updatedesc ) {
    const res = await axios.put("http://localhost:5000/notes/", {id, updatetitle, updatedesc});
    handleClose();
    getNotes();
         
  }

  const handleClose = () => {
    setOpen(false);
  };

  

  // ---------------------------

  function renderNotes() {
    return notes.map((note, i) => {
      return <div style={{ display:"inline-block",borderStyle: "ridge", padding:"20px", borderEndStartRadius: "50px", borderBlockEndColor:"yellowgreen", borderStartEndRadius:"50px", margin:"10px" }}
       
       key={i}> <b>Title: </b>  {note.title} <br/> 
       <b>Description: </b> {note.desc} <br/>
       
       <button onClick = {()=> delNote(note._id) } >Delete</button>
       <div>
      <Button variant="contained" style = {{ marginTop: "10px"  , padding: "0.5px"}} onClick={()=>handleClickOpen(note.title, note.desc)}>
      Edit
      </Button>

      <Dialog open={open} onClose={handleClose}>
        <DialogTitle>Update Your Note</DialogTitle>
        <DialogContent>
          {/* <DialogContentText>
            To subscribe to this website, please enter your email address here. We
            will send updates occasionally.
          </DialogContentText> */}
          <TextField
            autoFocus
            margin="dense"
            id="name"
            onChange={(e) => {
            setUpdateTitle(e.target.value);
          }}
            value = {UpdateTitle}
            label="Title"
            fullWidth
            variant="standard"
          />
          <TextField
            autoFocus
            margin="dense"
            id="name"
            onChange={(e) => {
            setUpdateDescription(e.target.value);
          }}
            value = {UpdateDescription}
            label="Description"
            type="email"
            fullWidth
            variant="standard"
          />
        </DialogContent>
        <DialogActions>
          <Button onClick={handleClose}>Cancel</Button>
          <Button onClick={()=> updateNote(note._id, UpdateTitle, UpdateDescription )}>Update</Button>
        </DialogActions>
      </Dialog>
    </div>
      
      </div>;
      
    }).reverse();
  }

  return (
    <div>
      <div >
      {renderNotes()}
      </div>
    </div>
  );
}

export default NoteList;

 

Ответ №1:

 function NoteList({notes}, {getNotes}) {
 

это должно быть так

 function NoteList({notes, getNotes}) {
 

или

  function NoteList(props) {
   ...    
   props.getNotes()
 

Ответ №2:

Вы неправильно разрушаете NoteList реквизит компонента. измените его на,

 function NoteList({ notes, getNotes }) {
 

Комментарии:

1. @sonukkc Любезно примите ответ, если он окажется полезным 🙂