programing

이 상태랑 이 상태랑 뭐가 달라?setstate를 ReactJS로 설정하시겠습니까?

randomtip 2023. 4. 1. 15:24
반응형

이 상태랑 이 상태랑 뭐가 달라?setstate를 ReactJS로 설정하시겠습니까?

값을 요.hasSubmit를를누누누누다다추천하지 않는 거 알아요., 두 코드는 setState.

  • this.state ★★★★★★★★★★★★★★★★★」setState
  • 값 " " " " " " " " " " " " " " " " " " " " " " " " " " " " 。hasSubmit★★★★★★★★★★★★★★★★?

첫 번째 코드:

this.state.hasSubmit = false
this.setState({})
//Code that will use `hasSubmit`.

두 번째 코드:

this.setState({
   hasSubmit: false,
});
//Code that will use `hasSubmit`.

추가:

시나리오는 다음과 같습니다.

  1. hasSubmit 설정하다falsegetInitialState().
  2. hasSubmit 바뀌게 됩니다.falsesubmit버튼을 클릭합니다.
  3. hasSubmit 바뀌게 됩니다.true출출시 。

[ ]를 클릭합니다.submit가 없고, 「」입니다.hasSubmit로 설정됩니다.true.

, 두 클릭을 합니다.submit 하면 거예요.Second asynchronous code「」이 있기 때문에hasSubmittrue 「」, 「」,First Code이 문제를 해결할 수 있습니다.

React 문서의 내용은 다음과 같습니다.

않다this.statesetState()는 setState()로 지정합니다..state를 사용합니다.

setState()는 this.state를 즉시 변환하지 않고 보류 상태의 천이를 작성합니다." " 의 액세스this.state이 메서드를 호출하면 기존 값이 반환될 수 있습니다.

setState에 대한 콜의 동기 동작은 보증되지 않으며 성능 향상을 위해 콜이 배치될 수 있습니다. setState()는 조건부 되지 않는 한 항상 .shouldComponentUpdate().

을 에서 할 수 경우shouldComponentUpdate(), 호출, 호출setState()새로운 상태가 이전 상태와 다른 경우에만 불필요한 재검출을 피할 수 있습니다.

API를 설계된 방식으로 사용하는 것이 항상 현명합니다.의사가 주(州)를 변이시키지 말라고 하면 주(州)를 변이시키지 않는 것이 좋습니다.

<고객명>님은setState()기술적으로 비동기적일 수도 있고 눈에 띄게 느리지는 않을 겁니다.포트 the render()이치

중 React의 인 React입니다.shouldComponentUpdate(),componentWillUpdate(),componentDidUpdate() -가 됩니다. - 서호호 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 。setState()하고, 「」에 전화하는 경우setState()오브젝트가 비어 있으면 이러한 메서드를 구현할 수 없게 됩니다.

또 하나는 그냥 형편없는 프로그래밍 스타일이라는 것이다.한 번에 할 수 있는 일을 두 개의 문장으로 하고 있습니다.

게다가 여기에는 실제적인 이점이 없습니다.경우든, 「」는,render()다음 시간까지 트리거되지 않습니다.setState()(또는forceUpdate())가 호출됩니다.

실제로 무엇이 필요한지 설명하지 않고 이 작업을 수행해야 한다고 주장합니다.아마도 당신은 당신의 문제를 좀 더 자세히 설명하고 싶을 것입니다.아마 더 나은 해결책이 있을 거예요.

틀에 반대하기보다는 틀을 가지고 일하는 것이 가장 좋습니다.

갱신하다

아래의 코멘트로부터:

아래의 변경된 hasSubmit을 사용해야 합니다.

네, 이제 알겠어요.미래 상태 속성을 즉시 사용해야 하는 경우 로컬 변수에 저장하는 것이 가장 좋습니다.

const hasSubmit = false;

this.setState({
  hasSubmit: hasSubmit
});

if (hasSubmit) { 
  // Code that will use `hasSubmit` ...

반응으로 상태를 변경하고 재렌더를 트리거하려는 경우:두 번째 코드를 사용합니다.

  this.setState({
    hasSubmit: false,
  });

첫 번째 코드의 문제/오류:

  this.state.hasSubmit = false      // Updates state directly: 
                                    // You are not supposed to do this
                                    // except in ES6 constructors
  this.setState({})                 // passes an empty state to react.
                                    // Triggers re-render without mutating state

this.setState는 반응 컴포넌트의 라이프 사이클을 유지하며 변수를 변환하는 것처럼 보이지 않습니다(내부적으로는 변환 상태가 발생하더라도).따라서 반응 사이클의 단방향 흐름은 부작용 없이 유지됩니다.

주의할 점은this.setStateES6 클래스의 컨스트럭터에서는 동작하지 않습니다.사용할 필요가 있다this.state =보다 오히려 패턴this.setStateES6 컨스트럭터에서

설명서의 조언을 무시해서는 안 됩니다.쓰기 시 setState는 setState 및 re-render가 종료되었을 때 콜백함수인 second 인수를 허용합니다.코드가 어떻게 hasSubmit 값을 사용하는지 알려주지 않기 때문에 다른 사용자가 hasSubmit이 변경되었는지 확인하고 싶을 때 도움이 될 수 있다고 생각합니다.

하면 됩니다.this.forceUpdate()첫 번째 예에서는 상태를 강제로 업데이트합니다.예를 들어 다음과 같습니다.

this.state.hasSubmit = false;
this.forceUpdate();

이렇게 쓰는 게 요.this.setStatenative native업 me me me me native native native native native native native native native native native check check check check-------------체크스테이트메카니즘을시작합니다.

「」의 임의의 .this.state로 directlysetState render 하지 않습니다.render mecanizm은 mecanizm을 갱신합니다.

언급URL : https://stackoverflow.com/questions/35867038/what-the-difference-of-this-state-and-this-setstate-in-reactjs

반응형