State Colocation will make your React app faster
Composition vs Inheritance - React
Ejemplo
Una solución para renderizar una tarea podría ser este componente
const App = () => (
<TodoList todos={todos} />
);
const TodoList = ({todos}) => (
<section>
{todos.map(todo => (
<TodoItem {...todo} />
))}
</section>
)
Existe otra forma de realizar esta tarea, y es que el componente App tenga también la tarea de renderizar cada tarea, esta manera nos dará mayor flexibilidad con el componente de TodoList
const TodoList = ({children}) => (
<section>
{children}
</section>
)
const App = () => (
<TodoList>
{todos.map(todo => (
<TodoItem {...todo} />
))}
</TodoList>
);
¿Dónde va tu estado?
Se puede usar ambos principios siempre si los entendemos muy bien
<aside> 💡 Pensar en lo más grande y poco a poco ir a lo más especifico
</aside>
Al usar composición de componentes puede ser una alternativa interesante en caso de que el árbol de componentes no sea demasiado profundo.
Ventajas
Ejemplo
const App = () => {
const [state, setState] = useState();
return (
<>
<TodoHeader>
<TodoCounter />
<TodoSearch onSearch={setState} />
</TodoHeader>
<TodoList>
{state.todos.map(todo => <TodoItem {...todo} {...state} />)}
</TodoList>
</>
);
}
Puedes observar que el componente se puede comunicar sin mucha complicación directamente con sus componentes hijos, nietos o incluso bisnietos.
Ejemplo
Una solución para renderizar una tarea podría ser este componente
const App = () => (
<TodoList todos={todos} />
);
const TodoList = ({todos}) => (
<section>
{todos.map(todo => (
<TodoItem {...todo} />
))}
</section>
)
Existe otra forma de realizar esta tarea, y es que el componente App tenga también la tarea de renderizar cada tarea, esta manera nos dará mayor flexibilidad con el componente de TodoList
const TodoList = ({children}) => (
<section>
{children}
</section>
)
const App = () => (
<TodoList>
{todos.map(todo => (
<TodoItem {...todo} />
))}
</TodoList>
);
¿Dónde va tu estado?
Se puede usar ambos principios siempre si los entendemos muy bien
Pensar en lo más grande y poco a poco ir a lo más especifico
Al usar composición de componentes puede ser una alternativa interesante en caso de que el árbol de componentes no sea demasiado profundo.
Ventajas
Ejemplo
const App = () => {
const [state, setState] = useState();
return (
<>
<TodoHeader>
<TodoCounter />
<TodoSearch onSearch={setState} />
</TodoHeader>
<TodoList>
{state.todos.map(todo => <TodoItem {...todo} {...state} />)}
</TodoList>
</>
);
}
Puedes observar que el componente se puede comunicar sin mucha complicación directamente con sus componentes hijos, nietos o incluso bisnietos.