내 React 구성 요소가 두 번 렌더링되는 이유는 무엇입니까?
P粉268654873
P粉268654873 2023-10-16 12:47:00
0
1
689

내 React 구성요소가 왜 두 번 렌더링되는지 모르겠습니다. 그래서 params에서 전화번호를 추출하여 Firestore를 통해 검색할 수 있도록 상태로 저장합니다. 전화번호와 영점이 처음으로 렌더링될 때 두 번 렌더링된다는 점을 제외하면 모든 것이 잘 작동하는 것 같습니다. 두 번째 렌더링에서는 모든 데이터가 올바르게 표시됩니다. 누구든지 나를 해결책으로 안내할 수 있습니까?

class Update extends Component {
constructor(props) {
    super(props);
    const { match } = this.props;
    this.state = {
        phoneNumber: match.params.phoneNumber,
        points: 0,
        error: ''
    }
}

getPoints = () => {
    firebase.auth().onAuthStateChanged((user) => {
        if(user) {
            const docRef = database.collection('users').doc(user.uid).collection('customers').doc(this.state.phoneNumber);
            docRef.get().then((doc) => {
                if (doc.exists) {
                const points = doc.data().points;
                this.setState(() => ({ points }));
                console.log(points);
                } else {
                // doc.data() will be undefined in this case
                console.log("No such document!");
                const error = 'This phone number is not registered yet...'
                this.setState(() => ({ error }));
                }
                }).catch(function(error) {
                console.log("Error getting document:", error);
                });
        } else {
            history.push('/')
        }
    });
}

componentDidMount() {
    if(this.state.phoneNumber) {
        this.getPoints();
    } else {
        return null;
    }
}

render() {
    return (
        <div>
            <div>
                <p>{this.state.phoneNumber} has {this.state.points} points...</p>
                <p>Would you like to redeem or add points?</p>
            </div>
            <div>
                <button>Redeem Points</button>
                <button>Add Points</button>
            </div>
        </div>
    );
  }
}

export default Update;

P粉268654873
P粉268654873

모든 응답(1)
P粉608647033

애플리케이션을 엄격 모드로 실행하고 있습니다. index.js로 이동하여 엄격 모드 태그를 주석 처리하세요. 렌더링을 찾을 수 있습니다.

이런 현상은 React.StrictMode의 의도적인 기능입니다. 이는 개발 모드에서만 발생하며 렌더링 단계에서 의도하지 않은 부작용을 감지하는 데 도움이 됩니다.

문서에서:

^ 이 경우에는 render 함수입니다.

React.StrictMode를 사용할 때 다시 렌더링이 발생할 수 있는 원인에 대한 공식 문서:

https://reactjs.org/docs/strict-mode.html#예상치 못한 부작용 감지

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿