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

391
Visualizações
Intento de establecer el valor de retroceso de solo lectura: selectorFamily

Hago un código de prueba. Se agregó selectorFamily de Recoil para configurar el estado con nombres. Se utilizará en el futuro para obtener algunos nombres de la API con la página proporcionada.

Los nombres se enumeran a continuación en la etiqueta de listado y un botón.

Cuando hace clic en el botón, cambiará el valor del segundo nombre, pero recibo el error: "Intento de establecer el valor de retroceso de solo lectura: selectorFamily", no puedo entender qué estoy haciendo mal con este código:

 import { selectorFamily, useRecoilState } from "recoil"; const namesState = selectorFamily({ key: 'names', get: (page) => ({ get }) => { let data = [ { name: 'Tom' }, { name: 'John' }, { name: 'Jane' } ]; return data; } }); const ChangeName = () => { const [names, setNames] = useRecoilState(namesState(3)); const changeSecondName = () => { let newNames = [...names].map((data, i) => { let newData = { ...data }; if (i === 1) { newData.name = 'Steve'; } return newData; }); setNames(newNames); }; return ( <div> <ul> {names.map((item) => { return ( <li key={item.name}>{item.name}</li> ); })} </ul> <button onClick={changeSecondName}>Change second name to Steve</button> </div> ); }; export default ChangeName;

el código es simple, solo intento cómo puedo cambiar algún valor en el objeto que está en la matriz.

Gracias

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Para poder llamar a useRecoilState en el selector, debe usar un átomo o un selector escribible (selector que tiene un método establecido). No tiene el método establecido implementado en su familia de selectores. Considere usar la familia de átomos en su lugar.

about 4 years ago · Juan Pablo Isaza Relatório

0

logro trabajar. Se agregó un nuevo estado escribible como dijo @shobe. También se agregó useEffiect para obtener y completar el estado de atomNames por primera vez:

 import { useEffect } from "react"; import { selectorFamily, useRecoilState, atom } from "recoil"; const namesAtomState = atom({ key: 'atomNames', default: [] }); const namesState = selectorFamily({ key: 'names', get: (page) => ({ get }) => { let data = [ { name: 'Tom' }, { name: 'John' }, { name: 'Jane' } ]; return data; } , set: () => ({ set, get }, value) => { const names = get(namesState(2)); let newNames = [...names].map((data, i) => { let newData = { ...data }; if (i === 1) { newData.name = 'Steve'; } return newData; }); set(namesAtomState, newNames); } }); const ChangeName = () => { const [namesAtom, setNamesAtom] = useRecoilState(namesAtomState); const [names, setNames] = useRecoilState(namesState(2)); // Update state when AJAX return values useEffect(()=>{ if (names) { setNamesAtom(names); } },[names, setNamesAtom]); // Set new name for second value in array const changeSecondName = () => { setNames(2); }; return ( <div> <ul> {namesAtom.map((item) => { return ( <li key={item.name}>{item.name}</li> ); })} </ul> <button onClick={changeSecondName}>Change second name to Steve</button> </div> ); }; export default ChangeName;
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