摘要:創(chuàng)建組件創(chuàng)建組件之前要注意以下幾點組件創(chuàng)建的名稱首字母得大寫組件中返回的只能是一個根節(jié)點,所有的內(nèi)容得用一個元素都框起來無狀態(tài)函數(shù)式組件無狀態(tài)函數(shù)式組件可以理解成就是一個函數(shù)生成的,使得代碼的可讀性更好,并且精簡便利,減少了冗余,無狀態(tài)組件
創(chuàng)建組件
創(chuàng)建組件之前要注意以下幾點:
組件創(chuàng)建的名稱首字母得大寫
組件中返回的JSX只能是一個根節(jié)點,所有的內(nèi)容得用一個元素都框起來
1.無狀態(tài)函數(shù)式組件無狀態(tài)函數(shù)式組件可以理解成就是一個函數(shù)生成的,使得代碼的可讀性更好,并且精簡、便利,減少了冗余,無狀態(tài)組件有以下特點:
組件無法被實例化,整體渲染提高
組件不能訪問this對象,因為沒有實例化,所以無法訪問到this對象
組件沒有生命周期
無狀態(tài)組件只能訪問輸入的props,沒有state狀態(tài)
import React from "react" import { connect } from "dva"; function CreateComponent(props) { console.log(props); return (2.React.Component類組件{props.name}今年{props.age}歲) } export default connect(state => ({ name:"小明", age:15 }))(CreateComponent);
每個組件類必須要實現(xiàn)一個render方法,這里要特別注意,這個render方法必須要返回一個JSX元素即要用一個最外層的元素將所有內(nèi)容都包裹起來,如果返回并列多個JSX元素是不合法,如下所示:
import React from "react" class CreateComponent extends React.Component { render() { return() } } export default CreateComponent;標(biāo)題
- 首先
- 其次
- 最后
以上實例,就是把h2元素和ul用一個div都給包起來
1.組件的事件監(jiān)聽import React from "react" class CreateComponent extends React.Component { clickFunc = (e) => { console.log("監(jiān)聽:",e.target.innerHTML); } clickValue = (value) => { console.log(value); } render() { return ( ) } } export default CreateComponent;
以上就是事件監(jiān)聽和傳參實例
2.組件的state和setState通常在組件中,state是用來放這個組件內(nèi)部參數(shù)的狀態(tài)的,而setState是用來改變state里面的參數(shù),例如:
import React from "react" class CreateComponent extends React.Component { state = { flag : true } clickValue = () => { this.setState({ flag: !this.state.flag }) } render() { return (3.組件的propsflag的值為:{this.state.flag ? "真" : "假"}) } } export default CreateComponent;
props是組件里面的屬性,在組件內(nèi)部是不能更改自己本身的props的,比如,建立一個組件,然后在另外一個組件里面調(diào)用這個組件,如下:
import React from "react"; function NewComponent(props) { return ({props.content}); } export default NewComponent;
建立一個組件NewComponent,然后調(diào)用,如下:
import React from "react" import NewComponent from "./newComponent.js" class CreateComponent extends React.Component { render() { return () } } export default CreateComponent;
從這里可以看出,props就是組件帶入的屬性值,props其實就是讓外部組件對自己進(jìn)行配置,而state是組件控制自己的狀態(tài)
4.組件的生命周期constructor初始化一些參數(shù)屬性等等
componentWillMount這個函數(shù)在react16.3.0之后慢慢的被棄用了,使用componentDidMount替換
componentDidMount在組件渲染之后實行,可以加載數(shù)據(jù)
render組件渲染顯示頁面
import React from "react" class CreateComponent extends React.Component { constructor () { super() console.log("construct:頁面初始化") } componentWillMount () { console.log("componentWillMount:頁面將要渲染") } componentDidMount () { console.log("componentDidMount:頁面渲染結(jié)束") } render() { console.log("render:頁面渲染"); return (頁面渲染) } } export default CreateComponent;
輸出結(jié)果:
construct:頁面初始化 componentWillMount:頁面將要渲染 render:頁面渲染 componentDidMount:頁面渲染結(jié)束
componentWillUnmount函數(shù)是在組件要刪除之前執(zhí)行的函數(shù),如下代碼:
import React from "react"; class NewComponent extends React.Component { componentWillUnmount() { console.log("componentWillUnmount:將要從頁面中刪除"); } render() { return ({this.props.content}); } } export default NewComponent;
建立一個組件NewComponent,然后在CreateComponent組件中引入這個組件,如下:
import React from "react" import NewComponent from "./newComponent.js"; class CreateComponent extends React.Component { constructor () { super() console.log("construct:頁面初始化"); this.state = { content:"測試組件", isDelete:false } } componentWillMount () { console.log("componentWillMount:頁面將要渲染") } componentDidMount () { console.log("componentDidMount:頁面渲染結(jié)束") } deleteFunc = () => { this.setState({ isDelete:true }) } render() { console.log("render:頁面渲染"); return (頁面渲染 {!this.state.isDelete?() } } export default CreateComponent;):(null)}
當(dāng)點擊刪除按鈕的時候,組件NewComponent會被刪除,在刪除之前會執(zhí)行componentWillUnmount函數(shù)
輸出結(jié)果:
construct:頁面初始化 componentWillMount:頁面將要渲染 render:頁面渲染 componentDidMount:頁面渲染結(jié)束 componentWillUnmount:將要從頁面中刪除
以上幾個生命周期是我們會常用到的組件生命周期,組件的生命周期還有更新階段的生命周期,不過這些比較少用,這里簡單介紹一下:
通過這個方法控制組件是否重新渲染,如果返回false不會重新渲染,如下
import React from "react" import NewComponent from "./newComponent.js"; class CreateComponent extends React.Component { constructor () { super() console.log("construct:頁面初始化"); this.state = { content:"測試組件", isDelete:false } } componentWillMount () { console.log("componentWillMount:頁面將要渲染") } componentDidMount () { console.log("componentDidMount:頁面渲染結(jié)束") } shouldComponentUpdate(nextProps, nextState){ if(nextState.isDelete){ return false; } } deleteFunc = () => { this.setState({ isDelete:true }) } render() { console.log("render:頁面渲染"); return (頁面渲染 {!this.state.isDelete?() } } export default CreateComponent;):(null)}
此時點擊刪除按鈕,頁面沒有進(jìn)行渲染,那是因為在shouldComponentUpdate中設(shè)置了返回值為false,當(dāng)返回值為false的時候,頁面無法重新渲染。這個函數(shù)第一個參數(shù)表示最新的props,第二個參數(shù)表示最新的state
組件從父組件接收到新的 props 之前調(diào)用,函數(shù)的參數(shù)nextProps表示接收到的數(shù)據(jù)
在NewComponent組件中:
import React from "react"; class NewComponent extends React.Component { componentWillUnmount() { console.log("componentWillUnmount:將要從頁面中刪除"); } componentWillReceiveProps(nextProps){ console.log(nextProps); } render() { return ({this.props.content}); } } export default NewComponent;
在組件CreateComponent中:
import React from "react" import NewComponent from "./newComponent.js"; class CreateComponent extends React.Component { constructor () { super() console.log("construct:頁面初始化"); this.state = { content:"測試組件", isDelete:false } } componentWillMount () { console.log("componentWillMount:頁面將要渲染") } componentDidMount () { console.log("componentDidMount:頁面渲染結(jié)束") } changeFunc = () => { this.setState({ content:"文字修改" }) } render() { console.log("render:頁面渲染"); return (頁面渲染 {!this.state.isDelete?() } } export default CreateComponent;):(null)}
不過componentWillReceiveProps將在react16.3.0開始之后棄用
組件重新渲染之前調(diào)用這個方法,將在react16.3.0開始之后棄用
組件重新渲染并且把更改變更到真實的 DOM 以后調(diào)用
注意: componentWillUpdate、componentWillReceiveProps、componentWillMount這三個生命周期將在react116.3.0之后開始棄用,具體詳情可查看官網(wǎng):https://reactjs.org/docs/reac...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/108474.html
摘要:系列一初識系列二組件的和系列三組件的生命周期是推出的一個庫,它的口號就是用來創(chuàng)建用戶界面的庫,所以它只是和用戶界面打交道,可以把它看成中的視圖層。系列一初識系列二組件的和系列三組件的生命周期 React系列---React(一)初識ReactReact系列---React(二)組件的prop和stateReact系列---React(三)組件的生命周期 showImg(https://...
摘要:定義一個組件可以在其他組件中調(diào)用這個組件調(diào)用組件劉宇組件插入內(nèi)容在上面的案例中可以看到吧寫到當(dāng)中,這種寫法稱為。 React初識 React是Facebook推出的一個javascript庫(用來創(chuàng)建用戶界面的Javascript庫),所以他只是和用戶的界面打交道,你可以把它看成MVC中的V(視圖)這一層。 組件 React的一切都是基于組件的。web世界的構(gòu)成是基于各種HTML標(biāo)簽的...
摘要:父級向子級傳參父子組件通信主要用到,如下在父組件中父組件我是父級過來的內(nèi)容在子組件中子組件通過上面例子可以看出,在父組件中,我們引入子組件,通過給子組件添加屬性,來起到傳參的作用,子組件可以通過獲取父組件傳過來的參數(shù)子級向父級傳參在父組件中 父級向子級傳參 父子組件通信主要用到props,如下: 在父組件中: import React from react import ChildCo...
摘要:初識依稀記得那年參加線下活動,第一次聽說這個詞語,當(dāng)時的主講人是郭達(dá)峰,他播放了一個關(guān)于及的性能對比視頻。合成事件會以事件委托的方式綁定到組件最上層,并且在組件卸載的時候自動銷毀綁定的事件。 初識React 依稀記得2015那年參加線下活動,第一次聽說React這個詞語,當(dāng)時的主講人是郭達(dá)峰,他播放了一個關(guān)于ember、angular及react的性能對比視頻: React.js Co...
閱讀 1111·2021-09-22 16:04
閱讀 1494·2019-08-30 15:43
閱讀 1097·2019-08-29 14:01
閱讀 3438·2019-08-26 12:19
閱讀 3352·2019-08-26 12:15
閱讀 1443·2019-08-26 12:13
閱讀 3264·2019-08-23 17:00
閱讀 1483·2019-08-23 15:38