Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

137
Visualizações
Cualquier cambio en redux almacena mi componente de causas para volver a renderizar

Estoy haciendo algunas pruebas en mi interfaz de usuario y me di cuenta de que si algún estado cambia en mi tienda redux, mi componente (que se muestra a continuación) se vuelve a procesar y se reinicia con el video incrustado en 0. Si escribo en un campo de texto conectado a redux , se vuelve a montar, si una notificación de estado llega a la tienda, se vuelve a montar, etc.

No tengo idea de cómo solucionar esto y realmente me vendría bien un poco de ayuda para averiguar cómo solucionar el error.

tldr; ¿Cómo puedo evitar que mi VideoPlayer se reproduzca cada vez que algo cambia en mi tienda redux?

  • redux-toolkit
  • react

componente

 const MyComponent = () => { ... // data used in the VideoPlayer is descructured from this variable: const formState = useSelector(selectDynamicForm); // renders output here in the same component return ( ... {sourceContentFound === false ? ( <VideoPlayerDisabled /> ) : ( <VideoPlayerController title={title} description={description} sourceAddress={iframeURL} author={authorName} timeStamp={{ startTime: 0 }} /> )} ) ... }

rebanada de formulario

 export const dynamicFormSlice = createSlice({ name: 'dynamicForm', initialState, reducers: { updateField: (state, action) => { state = action.payload; return state; } }, }); export const selectDynamicForm = createSelector( (state: RootState): dynamicFormState => state.dynamicForm, dynamicForm => dynamicForm );

estadoHandlerSlice

No creo que este componente haga nada loco, por ejemplo, pero aparece una notificación cuando se cumplen las condiciones del video. Cuando vuelve a bajar clearStatus , el reproductor de video se reinicia.

 export const statusHandlerSlice = createSlice({ name: 'statusHandler', initialState, reducers: { setStatus: (state, action: PayloadAction<IStatusObject>) => { const { type, display, message } = action.payload; state.status = { ...action.payload, message: message.charAt(0).toUpperCase() + message.slice(1), }; if (display === 'internal-only' || display === 'support-both') { statusLogger(type, message); } }, clearStatus: state => { state.status = { type: 'success', data: {}, message: '', display: 'internal-only', key: '', }; }, }, }); export const { setStatus, clearStatus } = statusHandlerSlice.actions; export const selectStatus = (state: RootState): IStatusObject => state.statusHandler.status;
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Su MyComponent se vuelve a renderizar cada vez que el cambio de estado de la tienda redux se debe a que tiene un selector en él

Puede evitar que esto suceda agregando un equalFn a useSelector .

Puede escribir su propia equalityFn o usar alguna función existente de una biblioteca que admita una comparación profunda.

Ej: Usar lodash isEqual

 import { isEqual } from 'lodash'; const MyComponent = () => { ... // data used in the VideoPlayer is descructured from this variable: const formState = useSelector(selectDynamicForm, isEqual);

De forma predeterminada, useSelector usa una comparación shallow que no puede detectar cambios profundos dentro de su objeto, cambiar a una función de comparación profunda como isEqual lo ayudará a hacerlo, pero no se recomienda para todos los selectores ya que habrá un impacto en el rendimiento.

Ejemplo en vivo:

Editar redux-useSelector-useDispatch-Sample (bifurcado)

about 4 years ago · Juan Pablo Isaza Relatório

0

  1. Sugiero crear un equalFn personalizado para comparar los datos que está utilizando en el componente actual o no seleccionar la porción completa, tal vez algunos cambios de propiedades no sean necesarios para su componente. me gusta:
 const { data } = useSelector(store => store.sliceA, shallowEq); // console.log(data) => { a: "foo", b: "bar" } // data.b is useless but once it is changed, the component will re-render as well return <Typography>{data.a}</Typography>
  1. Debe instalar React Devtools, activar el generador de perfiles, recordar verificar Record why each component rendered while profiling en la configuración para ver qué está causando que se vuelva a procesar. a veces, los ganchos personalizados en las bibliotecas desencadenan una nueva representación.

  2. whyDidYouRender también es una buena opción

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda