Endendendo useState e useReducer

9497 단어 reacttypescriptptbr

소개



O estado em uma aplicação react é um faz parte dos conceitos Fundamentais da biblioteca, desde a adoção dos hooks na versão 16.8 temos dois hooks que tem a função de lidar com estados, o useState e. Nesse post eu vou tentar dar uma breve explicação sobre cada um dos hooks e suas specificidades;

사용 상태



De acordo com @types/react o hook useState는 유용한 팁을 제공합니다.

function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];



  • O useState 수신 매개변수, o initialState
  • Esse parametro pode ser um valor do tipo S ou uma função que retorna o tipo S, que é um tipo genérico ou seja, o tipo do seu estado, podendo ser um numero, string, ou um objeto qualquer를 가정합니다.



  • O useState retorna uma array de duas posições
  • S se 심판 ao estado atual
  • Dispatch> é a função que vai atualizar aquele componente, o dispatch pde receber o valor que o estado vai ser atualizado ou um callback do tipo ((prevState: S) => S); recebendo o estado anterior e retornando o estado atual.


  • 리듀서 사용



    Ainda de acordo com @types/react o hook useReducer possui a seguinte tipagem,A estrutura básica do useReducer é uma função que recebe entre 2 e 3 parametros e retorna um array de duas posições:

      function useReducer<R extends Reducer<any, any>, I>(                                  
                reducer: R,                                                                       
                initializerArg: I,                                                                
                initializer: (arg: I) => ReducerState<R>                                          
            ): [ReducerState<R>, Dispatch<ReducerAction<R>>]; 
    )
    


  • Os 매개변수는 감소기를 사용합니다:
  • 리듀서 é um callback com a seguinte estrutura: (prevState: S, action: A) => S; , esse callback é o responsável por atualizar o estado, seria o equivalente ao SetStateAction do useState, porém com suas specificidades, a exemplo o parametro do callback, o action, nele é possível definir definir dad o tipo pass da ação at Pay 감속기 deve ficar mais claro durante os 예시.
  • o initializerArg assim como initialState do useState é o parametro que vai receber o estado inicial do estado.
  • Oinitializer , 변경 사항에 대한 응답을 받을 수 있도록 하십시오. initializeArg Durante a montagem do componente modificando o estado inicial do reducer.
  • O useReducer retorna um array com 2 매개변수: [ReducerState<R>, Dispatch<ReducerAction<R>>]
  • O Primeiro parametro é o State do useReducer
  • O segundo parametro é a função que vai chamar o reducer (1º parametro do useReducer), recebendo parametro action, onde no retorno do reducer o state é atualizado.

  • 예시



    사용 상태에 따라 사용 감소, 사용 상태에 따라 목록 사용 가능.

    사용 상태




    /* No caso do useState se quisermos alterar esse estado em um componente abaixo podemos passar o setPlayer como prop. e montar o callback no componente abaixo, ou montar o addPlayer e passa-lo como prop. */
    
    const [players, setPlayers] = useState(initialState); 
    const addPlayer = (newPlayer) => {
      setPlayers([...players, newPlayer])
    }
    // Como o setPlayers vai ser chamado 👇
    addPlayers('Ronaldo')
    
    


    리듀서 사용




    /* Com o useReducer uma vez que defnimos a função reducer e suas ações passamos simplesmente o dispatch para baixo na arvore de componentes e cada componente chama a sua respectiva ação */
    
    const reducer = (state, action) => {
        switch (action.type) {
          case "addPlayer": {
            const newState = [...state, action.payload];
            return newState;
          }
          default:
        }
      }
     const [players, dispatch] = useReducer(reducer, initialArg);
    // Como o reducer vai ser chamado 👇
    dispatch({ type : addPlayer, payload : "Ronaldo" })
    


    Os dois códigos acima fazer a exatamente a mesma coisa, o useReducer parece muito mais verboso e compelxo que o useState, quais suas vantagens ? uma situação que muitos outros metodos, adicionar, remover, atualizar... e ainda com outros estados como estado de loading, error entre outros. Como fariamos essas outras funções acessíveis para os componentes que a consomem? criariamos uma nova prop para cada função, até setia possível mas imagina o caos que não seri esse componente, o useReducer aparece nesses casos onde você precisa lidar com muitos métodos e estados de apoçar component 감소 법적 근거와 법적 근거, 법적 조치에 대한 법적 조치 수정, e ao invés de passar cada método com uma nova prop você pode passar só o dispatch e cada componente chama o tipo de ação.

    Quando você precisa lidar com apenas um estado, é mais simples conveniente utilizar o useState ao invés do use Reducer apenas um estado para



    참고문헌


  • React Documentation
  • 좋은 웹페이지 즐겨찾기