Reactjs에서 setState () (후크 사용) 후에 정의되지 않았습니다.

Kostya

나는 반응과 js를 배운다. 이 상황이 발생하는 이유를 설명하십시오. 추신 : 큰 텍스트에 대해 실례합니다. 가능한 한 명확하게 문제를 설명하려고 노력했습니다. 감사. 문제의 본질 : 후크를 통해 초기 상태 설정 :

  const [pokemon, setPokemon] = useState({
    img: "",
    name: "",
    types: [],
    abilities: [],
    moveList: [],
    weight: "",
    height: "",
    description: "",
    genus: "",
    chanceToCatch: "",
    evolutionURL: ""
  });

또한 useEffect 내부에서 정보를 얻기 위해 API 요청을합니다.

useEffect(() => {
    const fetchData = async () => {
      await Axios({
        method: "GET",
        url: urlPokemonAPI
      })
        .then(result => {
          const pokemonResponse = result.data;

          /* Pokemon Information */
          const img = pokemonResponse.sprites.front_default;
          const name = pokemonResponse.name;
          const weight = Math.round(pokemonResponse.weight / 10);
          const height = pokemonResponse.height / 10;
          const types = pokemonResponse.types.map(type => type.type.name);
          const abilities = pokemonResponse.abilities.map(
            ability => ability.ability.name
          );
          const moveList = pokemonResponse.moves.map(move => move.move.name);
          setPokemon(() => {
            return {
              img: img,
              name: name,
              weight: weight,
              types: types,
              abilities: abilities,
              moveList: moveList,
              height: height
            };
          });
        })

      await Axios({
        method: "GET",
        url: urlPokemonSpecies
      }).then(result => {
         let description = "";
         result.data.flavor_text_entries.forEach(flavor => {
          if (flavor.language.name === "en") {
           description = flavor.flavor_text;
          }
        });
        let genus = "";
        result.data.genera.forEach(genera => {
         if (genera.language.name === "en") {
          genus = genera.genus;
         }
        });
        const evolutionURL = result.data.evolution_chain.url;
        const eggGroups = result.data.egg_groups.map(
          egg_group => egg_group.name
        );
        const chanceToCatch = Math.round(
          (result.data.capture_rate * 100) / 255
        );
        setPokemon(pokemon => {
          return {
            ...pokemon,
            description: description,
            genus: genus,
            chanceToCatch: chanceToCatch,
            evolutionURL: evolutionURL,
            eggGroups: eggGroups
          };
        });
      });
    };
    fetchData();
  }, [urlPokemonAPI, urlPokemonSpecies]);

문제는 특별히 발생 eggGroups(중 동일한 취급으로 abilities하고 types그러한 문제가 없다). 그리고 이것은 나는이 페이지에 데이터를 출력 할 때 발생하는 것입니다 <div> Egg Group: {pokemon.eggGroups} </div>데이터가 정상적으로 표시되지만 최대한 빨리 출력을 원하는 eggGroups뿐만 아니라 abilitiestypes쉼표로 구분 ( join ( ',')) - 오류 : TypeError: pokemon.eggGroups is undefined. 콘솔을 통해이 문제를 확인하기로 결정하고이 eggGroups키를 타임 아웃에 넣었습니다.

여기에 이미지 설명 입력

언젠가 eggGroups는 정의되지 않습니다 ... 왜, 나는 이해할 수 없습니다. 하지만 상태를 별도로 설정하면 const [egg, setEgg] = useState ([]); setEgg (eggGroups);이런 문제는 관찰되지 않습니다. 왜 이런 일이 발생합니까? 모든 것이 typesabilities. 미리 감사드립니다.

Shubham Khatri

후크의 상태 업데이트 프로그램은 상태를 업데이트 할 때 상태 값을 병합하지 않고 대신 이전 값을 새 값으로 바꿉니다.

상태 업데이트 프로그램을 사용하기 때문에

 setPokemon(() => {
        return {
          img: img,
          name: name,
          weight: weight,
          types: types,
          abilities: abilities,
          moveList: moveList,
          height: height
        };
      });

eggGroups속성이 손실되어 정의되지 않습니다. 콜백에서 얻은 이전 상태 값을 분산하여 업데이트해야합니다.

setPokemon((prev) => {
        return {
          ...prev
          img: img,
          name: name,
          weight: weight,
          types: types,
          abilities: abilities,
          moveList: moveList,
          height: height
        };
      });

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

'this'는 Mongoose 사전 저장 후크에서 정의되지 않았습니다.

분류에서Dev

initialize ()에서 @PostConstruct를 사용한 후 @Controller가 등록되지 않았습니다.

분류에서Dev

사용자 정의 후크 내부의 useEffect가 React의 올바른 oreder에서 호출되지 않습니다.

분류에서Dev

codeigniter에서 후크가로드되지 않았습니다.

분류에서Dev

Dispatch가 reactjs를 사용하여 redux에서 정의되지 않았습니다.

분류에서Dev

'then'블록 안에 this.setState가 정의되지 않았습니다.

분류에서Dev

jQuery 이후에로드 된 스크립트에서 "$가 정의되지 않았습니다."

분류에서Dev

배포 후 Ionic 앱에서 ReferenceError : Promise가 정의되지 않았습니다.

분류에서Dev

Nuxt 저장소 mapGetters 속성이 beforeCreate () 후크에서 정의되지 않았습니다.

분류에서Dev

useSelector react-redux 후크를 사용하여 다시 선택-상태가 정의되지 않았습니다.

분류에서Dev

React.js-바인딩 후에도 "this"가 정의되지 않았습니다.

분류에서Dev

스크립트를 추가 한 후에도 Firebase가 정의되지 않았습니다.

분류에서Dev

webkitNotifications는 크롬 44에서 정의되지 않았습니다.

분류에서Dev

react useState setState는 firstload에서 정의되지 않았지만 새로 고침 후 완벽하게 작동합니다.

분류에서Dev

react.js useState 후크에 값이 할당되었지만 사용되지는 않았지만 괜찮습니다.

분류에서Dev

구성 요소에서 트리거되지 않는 사용자 지정 후크

분류에서Dev

각도에서 momentjs를 사용하면 정의되지 않았습니다.

분류에서Dev

사용자 정의 UITableView에서 didSelectRowAt이 호출되지 않았습니다.

분류에서Dev

Expanded를 사용한 후에도 'RenderBox가 레이아웃되지 않았습니다'오류

분류에서Dev

GlideAjax가 UI 매크로에 정의되지 않았습니다.

분류에서Dev

반응 | UseCallBack 내부의 소품이 사용자 정의 후크 내부에서 업데이트되지 않음

분류에서Dev

next.js에서 useReducer 후크와 함께 컨텍스트 API를 사용하면 useContext가 호출 될 때 다시 정의되지 않습니다.

분류에서Dev

.desktop 파일을 사용자 정의한 후 GVim이 더 이상 Unity에서 실행되지 않습니다.

분류에서Dev

DPKG 환경 변수 DPKG_HOOK_ACTION이 후크 스크립트에 설정되지 않았습니다.

분류에서Dev

창이 React 후크에서 정의되지 않았기 때문에 Gatsby 빌드가 실패합니다.

분류에서Dev

isset 사용 후에도 정의되지 않은 변수

분류에서Dev

로컬 저장소에서 가져온 후 개체 메서드가 정의되지 않았습니다.

분류에서Dev

자식에서 반환 한 후 컴포넌트 메서드 this.state.myState가 정의되지 않았습니다.

분류에서Dev

ReferenceError : express를 사용하여 node.js에 정의되지 않았습니다.

Related 관련 기사

  1. 1

    'this'는 Mongoose 사전 저장 후크에서 정의되지 않았습니다.

  2. 2

    initialize ()에서 @PostConstruct를 사용한 후 @Controller가 등록되지 않았습니다.

  3. 3

    사용자 정의 후크 내부의 useEffect가 React의 올바른 oreder에서 호출되지 않습니다.

  4. 4

    codeigniter에서 후크가로드되지 않았습니다.

  5. 5

    Dispatch가 reactjs를 사용하여 redux에서 정의되지 않았습니다.

  6. 6

    'then'블록 안에 this.setState가 정의되지 않았습니다.

  7. 7

    jQuery 이후에로드 된 스크립트에서 "$가 정의되지 않았습니다."

  8. 8

    배포 후 Ionic 앱에서 ReferenceError : Promise가 정의되지 않았습니다.

  9. 9

    Nuxt 저장소 mapGetters 속성이 beforeCreate () 후크에서 정의되지 않았습니다.

  10. 10

    useSelector react-redux 후크를 사용하여 다시 선택-상태가 정의되지 않았습니다.

  11. 11

    React.js-바인딩 후에도 "this"가 정의되지 않았습니다.

  12. 12

    스크립트를 추가 한 후에도 Firebase가 정의되지 않았습니다.

  13. 13

    webkitNotifications는 크롬 44에서 정의되지 않았습니다.

  14. 14

    react useState setState는 firstload에서 정의되지 않았지만 새로 고침 후 완벽하게 작동합니다.

  15. 15

    react.js useState 후크에 값이 할당되었지만 사용되지는 않았지만 괜찮습니다.

  16. 16

    구성 요소에서 트리거되지 않는 사용자 지정 후크

  17. 17

    각도에서 momentjs를 사용하면 정의되지 않았습니다.

  18. 18

    사용자 정의 UITableView에서 didSelectRowAt이 호출되지 않았습니다.

  19. 19

    Expanded를 사용한 후에도 'RenderBox가 레이아웃되지 않았습니다'오류

  20. 20

    GlideAjax가 UI 매크로에 정의되지 않았습니다.

  21. 21

    반응 | UseCallBack 내부의 소품이 사용자 정의 후크 내부에서 업데이트되지 않음

  22. 22

    next.js에서 useReducer 후크와 함께 컨텍스트 API를 사용하면 useContext가 호출 될 때 다시 정의되지 않습니다.

  23. 23

    .desktop 파일을 사용자 정의한 후 GVim이 더 이상 Unity에서 실행되지 않습니다.

  24. 24

    DPKG 환경 변수 DPKG_HOOK_ACTION이 후크 스크립트에 설정되지 않았습니다.

  25. 25

    창이 React 후크에서 정의되지 않았기 때문에 Gatsby 빌드가 실패합니다.

  26. 26

    isset 사용 후에도 정의되지 않은 변수

  27. 27

    로컬 저장소에서 가져온 후 개체 메서드가 정의되지 않았습니다.

  28. 28

    자식에서 반환 한 후 컴포넌트 메서드 this.state.myState가 정의되지 않았습니다.

  29. 29

    ReferenceError : express를 사용하여 node.js에 정의되지 않았습니다.

뜨겁다태그

보관