React with Axios에서 AJAX 호출을 만들었으며 응답 처리 방법에 대해 약간 혼란 스럽습니다. 나는 결과를 CONSOLE.LOG 때componentDidMount에서 ajax 호출의 상태 값 렌더링 시도가 실패 함 (React)
componentDidMount() {
axios.get('https://jsonplaceholder.typicode.com/users')
.then(res => {
const users = res.data
this.setState({ users });
});
}
render() {
console.log(this.state.users)
return (
<div>
{this.state.users.map(user => <p>{user.name}</p>)}
</div>
)
}
, 두 값이 반환됩니다 : 여기
내 코드입니다[]
- 초기 상태에 할당 된 빈 배열- 예상 API에서 배열.
이것은 아마도 초기화시 한 번 리턴 된 상태 값과 componentDidMount가 다시 리턴 된 상태 값으로 설명 할 수 있습니다.
this.state.users
값에 액세스하는 방법에 문제가 발생합니다. 물론 나는이 액세스 언제든지, 나는 AJAX 응답에서 반환 된 값을 원하지만, 예를 들어 내가 ...
{this.state.users[0].name}
배열의 첫 번째 개체에서 name
속성을 렌더링하려고하면 .. .it는 []
에 액세스하려고 시도하므로 아무 것도 반환하지 않습니다.
그러나, 나는 예상대로
{users.map(user => <p>user.name</p>)}
이유는 두 번째 예에서는 작동하지만 첫 번째 예에서는 작동하지 않습니다. 첫 번째가 초기 상태 값 (빈 배열)에서 데이터를 가져 오려고 시도하는 경우 을에서 this.state.users
까지 매핑하면 빈 배열을 통해 매핑하고 아무 것도 반환하지 않거나 오류가 발생합니다.
여기에서는 React 렌더링 프로세스를 완전히 이해하지 못했고 componentDidMount가 구성 요소 수명주기에서 어떻게 작동하는지 분명히 알지 못합니다. 응답 값을 상태에 직접 할당하려고 잘못 했습니까?
누구든지이 문제를 해결할 수 있으면 감사하겠습니다.
감사합니다. 그것은 여전히 어떻게 든 데이터에 어떻게 든 접근 할 수있는 'hacky'방법을 느낀다. 그러나 그것이 작동한다면 나는 추측을한다. :) – Paulos3000
사실 나는 그것이 전혀 해킹되지 않는다고 생각하지만, 여러 가지 방법으로 이것을 할 수있다. 한 가지 방법은 사용자를 다음과 같이 뽑아내는 것입니다 :'firstUser = this.state.users [0] || {}'. 그렇다면'{firstUser.name}'은 적어도 당신에게 오류를주지 않을 것입니다. 개인적으로는, 나는 첫 번째 대안을 선호한다. – tobiasandersen
좋습니다. 좋은 대안입니다. 감사합니다. 나는 아마 일을하는 React 방식에 익숙하지 않은 것 같아요. - 구성 요소 렌더링의 라이프 사이클 단계가 다르다는 것의 이점은 상태 값을 렌더링하기위한 조건문을 제공해야한다는 사소한 단점을 없앨 수 있습니다. – Paulos3000