您好,登錄后才能下訂單哦!
小編給大家分享一下React怎么區分Class和function定義的組件,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
React區分Class和function定義的組件方法:1、使用function定義組件,新增hook可以讓function定義的組件具有局部state;2、使用class定義組件,qs第二個參數過濾掉前綴。
React區分Class和function定義的組件方法:
使用function定義組件
import React, { useState, useEffect } from "react"; import { useLocation } from "react-router-dom"; import qs from "qs"; //qs用來格式化數據 import { movieDetail } from "../../services/movies"; //推薦使用function定義組件,react16.8以后新增hook可以讓function定義的組件具有局部state export default function Detail() { //function定義的組件沒有局部的數據,所以使用useState()獲取局部數據(局部狀態) //以下例子第一個參數表示定義的數據,第二個參數表示更改此數據要用到的方法,useState()中的參數表示定義數據的初始值 //也就是movie={video:{}} 若要定義多個值,多次使用useState就行了 const [movie, setMovie] = useState({ video: {}, }); const [live, sertLive] = useState({}); //live={} //function定義的組件不能使用this.props.location來獲取地址欄信息,使用useLocation()獲取地址欄信息 const location = useLocation(); console.log(location); //function定義的組件也沒有生命周期的鉤子函數,我們使用useEffect來模擬生命周期, //參數一表示參數二依賴的內容發生改變之后觸發的回調函數,如果參數二為空數組表示只執行一次(初始化執行) useEffect(() => { const query = qs.parse(location.search, { ignoreQueryPrefix: true, //此參數表示過濾掉前綴 }); //useEffect中調用異步函數如下所示 async function fetchData() { // You can await here const result = await movieDetail(query.id); console.log(result); setMovie(result.data.data.basic); sertLive(result.data.data.live); } fetchData(); }, []); return ( <div> <img style={{ width: "100%", margin: "0 auto", display: "block" }} src={live.img} ></img> <h2>{movie.name}</h2> <p>{movie.story}</p> <video controls autoPlay src={movie.video.url}></video> </div> ); }
使用class定義組件
import React, { useState, useEffect, Component} from "react"; import { useLocation } from "react-router-dom"; import qs from "qs"; //qs用來格式化數據 import { movieDetail } from "../../services/movies"; //使用class定義組件中this指向復雜,不推薦使用 export default class Detail extends Component { constructor(props) { super(props); console.log(props); this.state = { movie: { video: { url: "", }, }, }; } async componentDidMount() { console.log(this.props.location.search); //url傳參 //qs第二個參數表示過濾掉前綴 const query = qs.parse(this.props.location.search, { ignoreQueryPrefix: true, }); console.log(query); const result = await movieDetail(query.id); console.log(result); this.setState({ movie: result.data.data.basic, }); document .querySelectorAll(".nav ul li")[1] .querySelector("a") .classList.add("active"); } componentWillUnmount() { document .querySelectorAll(".nav ul li")[1] .querySelector("a") .classList.remove("active"); } render() { return ( <div> <h2>{this.state.movie.name}</h2> <p>{this.state.movie.story}</p> <video controls autoPlay src={this.state.movie.video.url}></video> </div> ); } }
看完了這篇文章,相信你對React怎么區分Class和function定義的組件有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。