ตาม reactjs.org, componentWillMount จะไม่ได้รับการสนับสนุนในอนาคต
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
ไม่จำเป็นต้องใช้ componentWillMount
หากคุณต้องการทำบางสิ่งบางอย่างก่อนที่ส่วนประกอบจะประกอบเข้าด้วยกันให้ทำใน Constructor ()
ถ้าคุณต้องการที่จะทำคำขอเครือข่ายอย่าทำมันใน componentWillMount เป็นเพราะการทำเช่นนี้จะนำไปสู่ข้อผิดพลาดที่ไม่คาดคิด
คำขอเครือข่ายสามารถทำได้ใน componentDidMount
หวังว่ามันจะช่วย
อัปเดตเมื่อ 08/03/2019
เหตุผลที่คุณถาม componentWillMount อาจเป็นเพราะคุณต้องการเริ่มต้นสถานะก่อนที่จะแสดงผล
เพียงทำใน useState
const helloWorld=()=>{
const [value,setValue]=useState(0) //initialize your state here
return <p>{value}</p>
}
export default helloWorld;
หรือบางทีคุณต้องการเรียกใช้ฟังก์ชั่นใน componentWillMount ตัวอย่างเช่นหากรหัสต้นฉบับของคุณมีลักษณะดังนี้:
componentWillMount(){
console.log('componentWillMount')
}
ด้วย hook สิ่งที่คุณต้องทำคือลบเมธอด lifecycle:
const hookComponent=()=>{
console.log('componentWillMount')
return <p>you have transfered componeWillMount from class component into hook </p>
}
ฉันแค่อยากจะเพิ่มบางสิ่งลงในคำตอบแรกเกี่ยวกับการใช้งานผล
useEffect(()=>{})
useEffect รันบนการแสดงผลทุกครั้งเป็นการรวมกันของ componentDidUpdate, componentDidMount และ ComponentWillUnmount
useEffect(()=>{},[])
ถ้าเราเพิ่มอาเรย์ที่ว่างใน useEffect มันจะทำงานเมื่อส่วนประกอบที่เมาท์ เป็นเพราะ useEffect จะเปรียบเทียบอาร์เรย์ที่คุณส่งไปให้ ดังนั้นจึงไม่จำเป็นต้องเป็นอาเรย์ที่ว่างเปล่ามันสามารถเป็นอาเรย์ที่ไม่เปลี่ยนแปลง ตัวอย่างเช่นมันอาจเป็น [1,2,3] หรือ ['1,2'] useEffect ยังคงทำงานเมื่อติดตั้งคอมโพเนนต์เท่านั้น
ขึ้นอยู่กับคุณว่าคุณต้องการให้มันรันเพียงครั้งเดียวหรือทำงานหลังจากการเรนเดอร์ทุกครั้ง ไม่เป็นอันตรายหากคุณลืมที่จะเพิ่มอาร์เรย์ตราบเท่าที่คุณรู้ว่าคุณกำลังทำอะไรอยู่
ฉันสร้างตัวอย่างสำหรับเบ็ด กรุณาตรวจสอบมัน
https://codesandbox.io/s/kw6xj153wr
อัปเดตเมื่อ 21/08/2019
มันเป็นสีขาวตั้งแต่ฉันเขียนคำตอบข้างต้น มีบางอย่างที่ฉันคิดว่าคุณต้องใส่ใจ เมื่อคุณใช้
useEffect(()=>{},[])
เมื่อตอบสนองเปรียบเทียบค่าที่คุณส่งผ่านไปยังอาร์เรย์ [] มันจะใช้ Object.is () เพื่อเปรียบเทียบ หากคุณส่งวัตถุไปให้เช่น
useEffect(()=>{},[{name:'Tom'}])
ตรงนี้เป็นเช่นเดียวกับ:
useEffect(()=>{})
มันจะแสดงผลใหม่ทุกครั้งเพราะเมื่อ Object.is () เปรียบเทียบวัตถุมันเปรียบเทียบการอ้างอิงไม่ใช่ค่าตัวเอง มันเหมือนกับเหตุผลที่ {} === {} ส่งคืนค่าเท็จเนื่องจากการอ้างอิงของพวกเขาแตกต่างกัน หากคุณยังต้องการเปรียบเทียบวัตถุเองไม่ใช่การอ้างอิงคุณสามารถทำสิ่งนี้:
useEffect(()=>{},[JSON.stringify({name:'Tom'})])