Я пишу веб-приложение для заметок React.js, в котором пользователь может добавить до 10 заметок.
Я использую map()
для итерации массива заметок и хук useState(1)
для обновления его количества (количество заметок по умолчанию равно 1), поэтому я хотел бы сделать что-то вроде этого:
{[...Array(noteCount)].map((_, i) => <Note onUpdateNoteCount={() =>setNoteCount(n => n - 1)} key={i} />)}
Дело в том, что компонент Note() находится внутри компонента Main(), который находится в компоненте App(), поэтому я хочу получить необходимые значения в качестве реквизита App(), а затем использовать их в Note(), но не может понять, как и куда его поместить.
Спасибо!
App.js
import React from 'react';
import Header from './Header';
import Main from './Main';
function App () {
const [noteCount, setNoteCount] = React.useState(1);
function multiplyNoteComponent () {
if (noteCount < 20) {
setNoteCount(n => n + 1)
}
else {
alert('too many notes. remove or combine some of them together!')
}
}
return (
<div>
<Header/>
{[...Array(noteCount)].map((_, i) => <Main onUpdateNoteCount={() =>setNoteCount(n => n - 1)} key={i} />)}
<button
style={{left: '5%'}}
id='addNoteBtn'
onClick={multiplyNoteComponent}
title='Add a note'
>
+
</button>
</div>
);
}
export default App;
Main.js
import React from 'react';
import Note from './Note';
function Main () {
return (
<main>
your notes are:
<Note/>
</main>
)
}
export default Main;
Note.js
import React from 'react';
function Note () {
return (
<div> <button title='delete note' onClick={}>X</delete>
<li>
<input type='text'/>
</li>
</div>
)
}
export default Note
Изменить: причина, по которой я думаю, что мне нужна функция setNoteCount() для использования в компоненте Note(), заключается в обратном отсчете при удалении заметки (каждая заметка имеет свою собственную кнопку удаления).
App
следует передатьNote
s как дочерние элементыMain
. Я не совсем понимаю, что мы должны отслеживать количество заметок. Вам нужно где-то сохранить текст, верно? Почему бы просто не иметь массив строк? - person Felix Kling   schedule 14.09.2020setNoteCount
в вашем дочернем компоненте, вы можете передать функцию в качестве реквизита дочернему компоненту, но я не думаю, что вы должны передавать общую функцию набора noteCount отдельной заметке, родитель должен обрабатывать установленное количество заметок . - person Atif Saddique   schedule 14.09.2020