제목에 모든 것이 나와 있습니다. componentDidMount
DOM 액세스가 필요한 모든 것에 왜 적절한 지 이해 하지만 AJAX 요청이 반드시 필요한 것은 아닙니다.
무엇을 제공합니까?
제목에 모든 것이 나와 있습니다. componentDidMount
DOM 액세스가 필요한 모든 것에 왜 적절한 지 이해 하지만 AJAX 요청이 반드시 필요한 것은 아닙니다.
무엇을 제공합니까?
답변:
componentDidMount
부작용입니다. 이벤트 리스너, AJAX 추가, DOM 변경 등
componentWillMount
거의 유용하지 않습니다. 특히 서버 측 렌더링에 관심이있는 경우 (이벤트 리스너를 추가하면 오류와 누수가 발생하고 다른 많은 문제가 발생할 수 있습니다).
componentWillMount
생성자와 동일한 목적을 제공하기 때문에 클래스 구성 요소에서 제거하는 것에 대한 이야기가 있습니다 . createClass
구성 요소에 남아 있습니다 .
componentWillMount
? 나는 정말로 구별을 보지 못합니다.
componentWillMount
렌더링에서 실행 된다는 것을 알 수 있습니다. Wheras를 사용하는 경우 componentDidMount
클라이언트 측에서만 실행됩니다. 결과적으로 componentWillMount
외부 상호 작용을 수행하거나 이벤트 등에 바인딩하는 것을 넣는 것은 좋은 생각이 아닙니다. 서버 측에서 구성 요소를 렌더링 할 계획이없는 경우 잠재적 인 코드 이식성을 위해 여전히 좋은 생각이 아닙니다. 이것은 @daniula의 답변에 설명되어있는 주된 이유가 아닙니다.
나는 처음에도 같은 문제가 있었다. 의뢰를 해보기로 componentWillMount
했지만 여러 가지 사소한 문제로 끝납니다.
ajax 호출이 새 데이터로 완료되면 렌더링을 트리거했습니다. 어떤 시점에서 컴포넌트 렌더링은 서버에서 응답을받는 것보다 더 많은 시간이 걸렸고이 시점에서 ajax 콜백은 마운트되지 않은 컴포넌트에서 렌더링을 트리거했습니다. 이것은 일종의 엣지 케이스이지만 아마도 더 많을 것이므로을 고수하는 것이 더 안전합니다 componentDidMount
.
componentWillMount
하므로 componentDidMount
아약스 호출에 계속 사용해야 합니다.
setState
구성 요소 생성자에서 호출해서는 안되며 AJAX 호출이 완료되는시기를 결정할 방법이 없습니다. twitter.com/dan_abramov/status/576453138598723585
문서에 따르면 상태를 설정하면 componentWillMount
다시 렌더링이 트리거되지 않습니다. AJAX 호출이 차단되지 않고 Promise
성공시 구성 요소의 상태를 업데이트하는 을 반환하는 경우 구성 요소가 렌더링 된 후 응답이 도착할 가능성이 있습니다. 으로 componentWillMount
트리거하지 않습니다 당신이 요청 된 데이터 렌더링 컴포넌트 존재 당신이 예상되는 동작을하지 않습니다 재 렌더링.
플럭스 라이브러리 중 하나를 사용하고 요청 된 데이터가 저장소에서 끝나는 경우 구성 요소가 연결되거나 연결된 구성 요소에서 상속되는 경우 해당 데이터의 수신이 대부분의 경우 props를 변경하므로 문제가되지 않습니다. 결국.
componentWillMount
첫 번째 렌더링 전에 새 상태가 정의 되었기 때문에 다시 렌더링을 트리거하지 않습니다. 그러나 setState
AJAX 콜백에서 호출되면 첫 번째 렌더링 후에 가장 확실하게 호출되며 다시 렌더링을 트리거합니다.
componentWillMount
그 안에있는 요소들에 접근하려고 한다면 그 구성 요소가 ... 탑재되지 않았기 때문에 실패 할 것이기 때문입니다.