Bienvenido al curso

1

Conoce a tu profesor y todo lo que aprenderás sobre Redux

2

¿Qué conocimientos me recomiendan para tomar este curso?

Repaso React

3

¿Qué es React y cómo funciona?

4

Preparando nuestro entorno de trabajo

5

Creación de la app con React

6

Agregando funciones a la app con React

7

Stateful vs Stateless

8

Ciclo de vida de React

9

Manejando promesas

10

React Router DOM

Introducción a Redux

11

¿Qúe es Redux, cuándo usarlo y por qué?

Fases de Redux

12

Introducción: las fases de Redux

13

Store

14

Reducers

15

Conexión a un componente

16

Action Creators

17

Redux Thunk

18

Explicación teórica: ciclo completo de Redux

19

Práctica: ciclo completo de Redux

Fases Extra

20

Archivos Types

21

Try Catch

22

Escenarios asíncronos

23

Componente Spinner

24

Componente Fatal

25

Tabla como componente

Compartir información en Redux

26

Introducción Compartir información en Redux

27

Parámetros por URL

28

Compartir Reducer

29

Múltiples Reducers

30

Llamando a múltiples reducers en una acción

31

Uso del estado en la acción

32

Evitar segundas búsquedas

33

Inmutabilidad

34

Evitar sobrescritura

35

Validación compuesta

36

Validación de errores

37

Modificando respuesta de url

38

Estado con interacción

39

Mostrar componentes dinámicamente

40

Llamadas asincronas dinámicas

41

Props por herencia vs estado

42

Estado compartido

Métodos HTTP

43

Introducción a métodos HTTP

44

Nuevo ciclo Redux

45

Normalizar datos

46

Mapear Objetos

47

Componente para agregar tarea

48

Manejar inputs con Reducer

49

POST

50

Deshabilitando botón

51

Redireccionar

52

Reutilizar componentes

53

PUT

54

DELETE

55

Últimos detalles

Conclusión

56

Conocimientos adquiridos

57

Qué hacer a continuación

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Redux por Bedu

Curso de Redux por Bedu

Rodolfo Saldivar

Rodolfo Saldivar

Manejar inputs con Reducer

48/57
Recursos

Aportes 17

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

A mi parecer usar Redux para manejar el estado de los inputs es matar un mosquito con una bola de cañón. Para eso podemos usar el estado interno del componente. Pero entiendo que el objetivo es enseñar cómo hacerlo con Redux

Reduciendo un poco la cantidad del codigo y aplicando ciertos conceptos del curso de React, se podría realizar de la siguiente manera:

Componente para añadir tareas:

handleChange = e => {
    this.props.handleInput(e);
};

Actions

exportconst handleInput = e => (dispatch, getState) => {
    const { name, value } = e.target;
    const { task } = getState().tasksReducer;

    const newTask = { ...task, [name]: value };
    dispatch({ type: SET_TASK, payload: newTask });
};

Reducer

case SET_TASK:
      return { ...state, task: action.payload };

Al realizarlo de esta manera estamos obviando utilizar un action para cada input.

Logré disminuir un poco la cantidad de código de esta manera:
para el componente añadir tareas:

  inputHandler = event => {
    const { name, value } = event.target;
    this.props.updateValue(name, value);
  };

en el actions:

export const updateValue = (name, value) => dispatch => {
  const data = {
    name,
    value
  };
  dispatch({
    type: UPDATE_VALUE,
    payload: data
  });
};

Y finalmente en el reducer:

    case UPDATE_VALUE:
      if (action.payload.name === "userId") {
        console.log("im here");
        return { ...state, userId: action.payload.value };
      } else {
        return { ...state, title: action.payload.value };
      }

Excelente, pero si estoy de acuerdo con que es mucho código para un formulario, ya que tocaría hacer cada cosa especifica para cada input, me parece algo muy tedioso, mejor optimizar
como lo dice la documentación de react

  1. Al tareasReducer le agrego dos atributos al estado inicial usuario_id: ‘’, titulo: ‘’ y creo dos nuevos casos de tipo cambio_usuario_id y cambio_titulo que van a retornar el estado pero con esos atributos del estado por lo que se mande del dispatch

  2. Creo dos actions en tareasActions que reciben por parámetro lo que se escribe en el input y realizan los dispatch que van y modifican el estado | usuario_id: ‘’, titulo: ‘’ por lo que escribe el usuario

  3. En el componente Guardar.js cuando ocurra un cambio en los inputs los manejamos con manejadores de evento que llama a su action correspondiente mandándole lo que escribió el usuario, y a los inputs le damos como value lo que esta en el estado

Conclusion: controlamos los inputs colocándole como valor lo que este en el input haciendo que lo que esta en el reducer sea única fuente de la verdad del input

¿Seria bueno usar para esto Redux Form?

Para no tener que crear una función para cada input, lo hice de la siguiente manera

// En el AddTasks

    User Id:
        <input
          name="Id"
          onChange={event => this.props.UpdateInput(event)}
          Value={this.props.Id}
          type="number"
        />
        <br /> <br />
        Title:
        <input
          name="Title"
          onChange={event => this.props.UpdateInput(event)}
          value={this.props.Title}
          type="text"
        />

// En el Action Creator de Tasks

export const UpdateInput = event => (dispatch, getState) => {
  const {
    target: { value },
    target: { name }
  } = event;

  const StateReducer = getState().TasksReducer;

  const UpdateState = {
    ...StateReducer,
    [name]: value
  };

  dispatch({
    type: UPDATE_INPUT,
    payload: UpdateState
  });

// En el Reducer Tasks

  case UPDATE_INPUT:
      return action.payload;```

Aunque es la forma en que se usa Redux, puede ser un poco largo la configuración. Pero creo que todo esto está bien visto cómo práctica. Excelente!

Excelente clase. 🙂

Yo aun ando un poco confundido sobre como se comunican cada uno

tengo una duda, por que cuando estoy haciendo referencia a la arrow function en el input, la hago sin usar parentesis? tiene que ver con que el dispatch tiene el mismo nombre?

<input value={this.props.title} onChange={this.cambioTitulo }/>

Pequeña observación, no consideran que ese código de los actions y de las funciones del componente se puede refactorizar y que esa función sean una sola para todos los input, lo pienso porque si tuviésemos 20 inputs por cada uno tendríamos que hacer funciones, no lo veo muy escalable, no se si lo refactorice después pero hasta aquí se me hace mucho código.

Excelente

si el form tuviera 10 campo o mas, se podria juntar todo en una función y no una funcion para cada input?

Me pasa la cosa mas rara. En el usuario_id me deja poner numero solo si antes le pongo una “e” y en el titulo no me deja poner nada.

Si verifico con el console.log me muestra normal los valores que entran

sáquenme de una duda, no se puede enviar todo el formulario al reducer para actualizar todos los campos del estado en lugar de hacerlo uno por uno?

class Guardar extends Component {
    cambioUsuarioId = (event) => {
        this.props.cambioUsuarioId(event.target.value)
    }
    cambioTitulo = (event) => {
        this.props.cambioTitulo(event.target.value)
    }

    render() {
        return (
            <div className="formulario">
                <h1>Saving</h1>
                <label>User ID:</label>
                <input 
                    type="number"
                    value={ this.props.usuario_id }
                    onChange={ this.props.cambioUsuarioId() }
                />
                <label>Titulo:</label>
                <input 
                    type="text"
                    value={ this.props.titulo }
                    onChange={ this.props.cambioTitulo() }
                />
                <button>Save</button>
            </div>
        )
    }
}

const mapStateToProps = ({ tareasReducer }) => tareasReducer

export default connect(mapStateToProps, tareasActions)(Guardar)```