react form javascript reactjs redux

javascript - form - Aplicación grande(ish) que edita una gran cantidad de contenido



redux saga (1)

Estoy trabajando en una aplicación que incluye muchas entradas que son parte de un gran árbol de datos.

Los datos son similares a esto:

data: { input_1: "Text", input_2: "etc", ... input_n: "foo" }

Cada componente de entrada recibe, como apoyo, la clave para la ubicación de los datos que se supone que debe mostrar y modificar ( <InputComponent data={data[''input_1'']} objectKey={''input_1''} onChange={this.updateData} /> ).

Hay alguna validación que ocurre dentro del componente en sí, pero básicamente this.onChange se elimina y se llama cuando se cambia el texto.

Estoy manejando onChange de una manera similar a esto:

onChange = (newInput, objectKey) => { const {data} = this.state; const newData = { ...data, [objectKey]: newInput }; this.setState({ data: newData }); };

Estoy notando algunas ralentizaciones y un comportamiento lento al actualizar las entradas. Esto es, al menos en la medida en que lo entiendo, porque cada componente que está "enganchado" a estos datos se está volviendo a procesar.

¿Es esto un enfoque tonto? Si es así, ¿cuál sería mejor? Todavía no es tan malo, pero anticipo que esto empeorará a medida que aumenta en tamaño / complejidad.


Este es mi enfoque, cualquier crítica es bienvenida ya que también estoy buscando una forma mejor para mi aplicación con un problema similar.

Haría InputComponent como PureComponent con un estado interno para el valor de entrada actual. PureComponent hará automáticamente una comparación superficial con su state . Si su InputComponent es más complejo con state consiste en matrices u objetos profundos, debe implementar manualmente su shouldComponentUpdate usted mismo.

El onChange simplemente actualizaría su estado interno, luego debounce la llamada props.onChange

onChange(val) { this.setState(val); debounce(this.props.onChange(val)); }

De esta manera, la actualización parece más suave y, después de eso, el valor de los padres también se actualiza en consecuencia sin volver a procesar y actualizar los elementos InputComponent .