Die gleiche Komponente mit unterschiedlichem Inhalt rendern #59
-
Hallo zusammen, ich hänge hier an einer vermeintlich einfachen Sache, hab aber ein Brett vorm Kopf. Man sagt ja, die Komponenten sollen dumm sein, damit sie wiederverwendbar sind. Ich habe eine Komponente Auf einer Seite (aktuell
App.js
Ich möchte auf einer neuen Seite alle Aufgaben (also das ganze Array) anzeigen lassen, damit der User auch sehen kann, was an anderen Tagen zu tun ist und z.B. auch die mit dem Formular neu angelegten Aufgaben kontrollieren kann. Aktuell bin ich soweit, dass mir alles Tage angezeigt werde, indem ich einen neuen useSate geschrieben habe und
Das Problem: Das Ziel: Ausprobiert habe ich
(Über meine aktuellen Versuche habe ich keinen PullRequest online, da ich ziemlich viel ausprobiert habe und befürchte, dass es eher verwirrend ist. ) Ich hoffe die Links funktionieren, hier gehts zu meinem Repo: Capstone-Project Sollten Fragen dazu offen sein, gerne einfach fragen :) |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments
-
Ich kann dir empfehlen, alle deine Todos in einem einzigen useState zu speichern, dieser gilt dann als deine "single source of truth", du kannst ihn ja zb. todos nennen. Diesen State kannst du dann an deine TaskList Componente weitergeben als prop. Gleichzeitig musst du die create, update und delete Funktionen auch weitergeben, damit die Komponente darauf Zugriff hat: const [todos, setTodos] = useState( ... );
return (
...
<TaskList todos = {todos} onCreate={insertNewTodo} onDelete = {handleDeleteTodo} onUpdate={handleUpdateTodo} />
... Innerhalb der Tasklist Componente kannst du auf die Props zugreifen und sie verwenden: function TaskList({todos, onCreate,onDelete,onUpdate}) {
...
return <ul>
{todos.map(todo => <li key = {todo.id}>todo.text</li>)}
</ul>
} Das tolle ist nun, dass du const dailyTodos = todos.filter(todo => todo.weekday === category) Je nachdem wo du die Homepage.js und AllTodos anzeigen lassen willst kannst du deine TaskList entsprechend aufrufen: // renders all Todos in List
<TaskList todos = {todos} onCreate={insertNewTodo} onDelete = {handleDeleteTodo} onUpdate={handleUpdateTodo} />
...
// renders only Daily Todos
<TaskList todos = {dailyTodos} onCreate={insertNewTodo} onDelete = {handleDeleteTodo} onUpdate={handleUpdateTodo} /> Da ich nicht genau weiß wo du Homepage.js aufrufst und wie du dein Pagerouting machst kann es sein, dass du deinen State und die Update Funktionen erst an die Zwischenkomponenten weitergeben musst z.B.: <Homepage todos = {todos} onCreate={insertNewTodo} onDelete = {handleDeleteTodo} onUpdate={handleUpdateTodo} /> Wenn noch etwas unklar ist schreibe mich gerne an. |
Beta Was this translation helpful? Give feedback.
-
Vielen Dank lieber @F-Kirchhoff für die ausführliche Rückmeldung!
|
Beta Was this translation helpful? Give feedback.
Ich kann dir empfehlen, alle deine Todos in einem einzigen useState zu speichern, dieser gilt dann als deine "single source of truth", du kannst ihn ja zb. todos nennen. Diesen State kannst du dann an deine TaskList Componente weitergeben als prop. Gleichzeitig musst du die create, update und delete Funktionen auch weitergeben, damit die Komponente darauf Zugriff hat:
Innerhalb der Tasklist Componente kannst du auf die Props zugreifen und sie verwenden: