Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

98
Views
La actualización de React State no se refleja dentro de un componente secundario si se interpola en una cadena

Tengo un problema en el que mi componente se vuelve a renderizar con éxito, pero el estado no cambia dentro de los componentes secundarios que reciben la fecha interpolada dentro de una cadena.

Ejemplo:

 export const IntegrationPage = () => { const currentWorkspace = useSelector(getCurrentWorkspace); const workspaceState = useSelector(getWorkspaceState); const [workspaceId, setWorkspaceId] = useState(currentWorkspace?.identifier); useEffect(() => { setWorkspaceId(currentWorkspace?.identifier); //if I console.log workspaceId here, it updates correctly as well. }, [currentWorkspace]); if (!currentWorkspace || workspaceState.status === Status.requesting || !workspaceId) { return <LoadingSpinner />; } return ( <div className={styles.IntegrationPage}> <div className={styles.content}> <div className={styles.left}> //This updates correctly <Card leftHeader="Tracking overview" rightHeader={`ID: ${workspaceId}`}> <CardItem content="No visits in last 48 hours" header="No data" variant="item" /> </Card> <CodeBox> {`something here ${workspaceId} something else`} </CodeBox> ... </div> </div> ); };

Caja de código:

 type CodeBoxProps = { children?: ReactNode; src?: string; }; export const CodeBox: FunctionComponent<CodeBoxProps> = ({ children, src }) => { const dispatch = useDispatch(); const handleCopy = () => { const text = src?.toString() ?? children?.toString(); navigator.clipboard.writeText(text ? text : ""); dispatch(showNotification("Code was copied to clipboard", "success", "clipboard", 2250)); }; return ( <div className={styles.codeBox} onClick={handleCopy}> <code className={styles.code}>{src ?? children}</code> </div> ); };

Como puede ver, he intentado pasar el código dentro de un accesorio src en lugar de children pero el error persiste.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Lo "resolví" usando redux y actualizando la acción:

 export const changeWorkspace = (workspaceId: number) => async (dispatch: any) => { await dispatch({ type: WORKSPACE_CHANGE, workspaceId, }); return dispatch({ type: WORKSPACE_SET, workspaceId, }); localStorage.setItem("selected-workspace", workspaceId); }; //reducer: case WORKSPACE_CHANGE: return { ...state, status: Status.change, currentWorkspace: state.workspaces.find((workspace) => workspace.id === action.workspaceId), }; case WORKSPACE_SET: return { ...state, status: Status.success, };

Y luego actualizando la condición del hilandero de carga así:

 if (!currentWorkspace || workspaceState.status === Status.change || !workspaceId) { return <LoadingSpinner />; }

Lo que obliga a volver a renderizar todo el componente cada vez que cambio el espacio de trabajo. (El estado change , por lo que devuelve la rueda de carga durante una fracción de milisegundo y luego vuelve a representar el componente con los valores correctos)

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!