React Tips: JSX 조건문, setState 비동기식 기능

4796 단어

JSX 조건문


삼원 표현식

const Test = function(props) {
  const { flag1, flag2 } = props
  return (
    
{flag1 && flag2 ?

11111

:

22222

}
) }

지금 실행 함수

const Test = function(props) {
  const { flag1, flag2 } = props
  return (
    
{ (() => { if (flag1 && flag2) { return

11111

} else { return

22222

} })() }
) }

조건문

const Test = function(props) {
  const { flag1, flag2 } = props
  const condition = flag1 && flag2
  if (condition) return 

111111

if (!condition) return

222222

return

333333

}

do 표현식(stage0 새 제안)

const Test = function(props) {
  const { flag1, flag2 } = props
  return (
    
{ do { if (flag1 && flag2) {

11111

} else {

22222

} } }
) }

setState() 비동기식

  • setState 시 함수는this를 즉시 수정하지 않고 임시state를 과도state로 만듭니다.state. setState () 함수를 호출한 후this에 접근해 보십시오.state, setState () 함수가 실행되기 전의 결과일 수도 있습니다.
  • setState는 여러 번 state 업데이트를 실행할 때 한 번의 업데이트로 통합됩니다. 이 때 setState는 비동기 함수로 표시됩니다
  • 일부 브라우저 API는 state 업데이트 동기화addEventListener setTimeout fetch
  • setState () 함수가 실행될 때 함수는this를 즉시 수정하지 않고 임시state를 과도state로 만듭니다.state. setState () 함수를 호출한 후this에 접근해 보십시오.state, setState () 함수가 실행되기 전의 결과일 수도 있습니다.
  • class TestComponent extends React.Component {
    
      constructor(props) {
        super(props);
        this.state = {
          count: 0
        }
      }
    
      componentDidMount() {
          this.setState({count: this.state.count + 1})
          console.log(this.state.count) // 0 state  
    
          this.setState({count: this.state.count + 1})
          console.log(this.state.count) // 0 state  
    
          setTimeout(() => {
            console.log(this.state.count) // 1 state  ,  
    
            this.setState({count: this.state.count + 1})
            console.log(this.state.count) // 2 state  
            
            this.setState({count: this.state.count + 1})
            console.log(this.state.count) // 3 state  
          })
      }
    }
    
  • addEventListener,setTimeout 함수나ajaxcall을 보낼 때setState를 호출하면state가 변경됩니다.그리고render 함수는 setState () 함수가 터치되면 바로 호출됩니다.
  • addEventListener setTimeout ajaxcall은 이벤트 순환에서 브라우저 차원의 API에 속합니다. 이 API의 리셋 함수는 브라우저 자원에서 실행되고 대기열에 들어가서 이벤트 순환을 통해 script에서 실행됩니다.
  • 브라우저 차원의 API의 상하문 환경은 이미 React에 속하지 않는다. React는 이러한 리셋 함수를 제어할 수 없고 그들이 초래한state 업데이트를 통합할 수 없다. 그래서 동기화 정책을 사용하여 제때에 업데이트하여 이 함수가 실행된 후의 다른 코드가 정확한 데이터를 얻을 수 있도록 확보한다
  • JSX에서props를 통해 onClick을 연결하는 이벤트는 React 상하문에 있고, React는 이러한 이벤트 리셋 함수를 제어할 수 있습니다
  • class TestComponent extends React.Component {
    
      constructor(props) {
        super(props);
        this.state = {
          count: 0
        }
      }
    
      componentDidMount() {
        document.getElementById('button1').addEventListener('click', this.onClickHandler1);
    
        setTimeout(this.onTimeoutHandler, 10000);
    
        fetch('https://api.github.com/users')
          .then(this.onAjaxCallback);
      }
    
      onClickHandler1 = () => {
        console.log('State before (onClickHandler1): ' + JSON.stringify(this.state));
        this.setState({
          count: this.state.count + 1
        });
        console.log('State after (onClickHandler1): ' + JSON.stringify(this.state));
      }
    
      onClickHandler2 = () => {
        console.log('State before (onClickHandler2): ' + JSON.stringify(this.state));
        this.setState({
          count: this.state.count + 2
        });
        console.log('State after (onClickHandler2): ' + JSON.stringify(this.state));
      }
    
      onTimeoutHandler = () => {
        console.log('State before (timeout): ' + JSON.stringify(this.state));
        this.setState({
          count: this.state.count + 3
        });
        console.log('State after (timeout): ' + JSON.stringify(this.state));
      }
    
      onAjaxCallback = (err, res) => {
        console.log('State before (AJAX call): ' + JSON.stringify(this.state));
        this.setState({
          count: this.state.count + 4
        });
        console.log('State after (AJAX call): ' + JSON.stringify(this.state));
      }
    
      render() {
        console.log('State in render: ' + JSON.stringify(this.state));
    
        return (
          
    ); } }

    좋은 웹페이지 즐겨찾기