react helmet create app javascript reactjs state immutability redux

javascript - helmet - ¿No es Redux simplemente glorificado estado global?



react title (1)

¿No es Redux simplemente glorificado estado global?

Por supuesto que es. Pero lo mismo vale para cada base de datos que alguna vez haya usado. Es mejor tratar a Redux como una base de datos en memoria, de la cual sus componentes pueden depender reactivamente.

La inmutabilidad permite verificar si algún subárbol ha sido alterado de manera muy eficiente porque simplifica a una verificación de identidad.

Sí, su implementación es eficiente, pero se deberá volver a representar todo el dom virtual cada vez que se manipule el árbol de alguna manera.

Si está utilizando React, eventualmente hará una diferencia contra el dom real y realizará manipulaciones mínimas optimizadas por lotes, pero la representación completa de arriba hacia abajo sigue siendo ineficiente.

Para un árbol inmutable, los componentes sin estado solo tienen que verificar si los subárboles de los que depende, difieren en las identidades en comparación con los valores anteriores, y si es así, la representación se puede evitar por completo.

Así que comencé a aprender React hace una semana e inevitablemente llegué al problema del estado y cómo se supone que los componentes se comunican con el resto de la aplicación. Busqué y Redux parece ser el sabor del mes. Leí toda la documentación y creo que en realidad es una idea bastante revolucionaria. Aquí están mis pensamientos al respecto:

Se acepta generalmente que el estado es bastante malvado y una gran fuente de errores en la programación. En lugar de dispersarlo por toda la aplicación, Redux dice: ¿por qué no concentrarlo todo en un árbol de estado global para emitir acciones para cambiar? Suena interesante. Todos los programas necesitan estado, así que peguémoslo en un espacio impuro y solo lo modifiquemos desde allí para que los errores sean fáciles de rastrear. Entonces también podemos vincular declarativamente piezas de estado individuales a componentes React y hacer que se vuelvan a dibujar automáticamente y todo es hermoso.

Sin embargo, tengo dos preguntas sobre todo este diseño. Por un lado, ¿por qué el árbol de estado debe ser inmutable? Digamos que no me importa la depuración de viajes en el tiempo, la recarga en caliente y ya he implementado deshacer / rehacer en mi aplicación. Parece tan engorroso tener que hacer esto:

case COMPLETE_TODO: return [ ...state.slice(0, action.index), Object.assign({}, state[action.index], { completed: true }), ...state.slice(action.index + 1) ];

En lugar de esto:

case COMPLETE_TODO: state[action.index].completed = true;

Sin mencionar que estoy haciendo una pizarra en línea solo para aprender y cada cambio de estado podría ser tan simple como agregar un trazo de pincel a la lista de comandos. Después de un tiempo (cientos de pinceladas) la duplicación de toda esta matriz podría comenzar a ser extremadamente costosa y lenta.

Estoy de acuerdo con un árbol de estado global que es independiente de la interfaz de usuario que está mutada a través de acciones, pero ¿realmente necesita ser inmutable? ¿Qué hay de malo en una implementación simple como esta (borrador muy preliminar, escrito en 1 minuto)?

var store = { items: [] }; export function getState() { return store; } export function addTodo(text) { store.items.push({ "text": text, "completed", false}); } export function completeTodo(index) { store.items[index].completed = true; }

Sigue siendo un árbol de estado global mutado a través de acciones emitidas pero extremadamente simple y eficiente.