내 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;
애플리케이션을 엄격 모드로 실행하고 있습니다. index.js로 이동하여 엄격 모드 태그를 주석 처리하세요. 렌더링을 찾을 수 있습니다.
이런 현상은 React.StrictMode의 의도적인 기능입니다. 이는 개발 모드에서만 발생하며 렌더링 단계에서 의도하지 않은 부작용을 감지하는 데 도움이 됩니다.
문서에서:
^ 이 경우에는
render
함수입니다.React.StrictMode를 사용할 때 다시 렌더링이 발생할 수 있는 원인에 대한 공식 문서:
https://reactjs.org/docs/strict-mode.html#예상치 못한 부작용 감지