最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React創(chuàng)建對話框組件的方法實例

 更新時間:2022年05月12日 11:33:13   作者:csu_zipple  
在項目開發(fā)過程中,對于復雜的業(yè)務選擇功能很常見,下面這篇文章主要給大家介紹了關于React創(chuàng)建對話框組件的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

原生的前端體系創(chuàng)建一個對話框可是再簡單不過了。但是如果放到組件化思想下的react體系中,想要制作一個屬于自己的對話框還是有一定的麻煩的。主要遇到的問題有兩個:一是如何在子組件中創(chuàng)建body下的對話框組件,二是如何刪除這個組件。

接下來我們就一步一步解決這兩個問題。

我們先寫好dialog組件:(所有的樣式都不寫了,這里實現(xiàn)一個原型)

class Dialog extends Component{
    constructor(props){
        super(props);
    }
    render(){
        return(
            <div className="dialog">
                <div className="title">{this.props.title}</div>
                <div className="content">{this.props.children}</div>
                <div className="button-area">
                    <a onClick={this.props.onClickCancle.bind(this)}   className="btns">取消</a>//這里接收父組件傳遞過來的關閉對話框的方法
                    <a className="btns btns-blue">確定</a>
                </div>
            </div>
        )
    }
}

動態(tài)創(chuàng)建組件到body中,react為我們提供了一個方法:ReactDOM.unstable_renderSubtreeIntoContainer(parent,component,dom),parent一般是this,組件就是對話框組件,dom就是要插入的dom節(jié)點。

根據(jù)這個方法,我們就可以為對話框?qū)懸粋€父組件,用于全屏居中顯示:

class DialogCenter extends Component{
    constructor(props){
        super(props);
    }
    appendToBody() {
        ReactDOM.unstable_renderSubtreeIntoContainer(
            this,
            <Dialog title="this is  a title!" onClickCancle={this.props.onClickCancle.bind(this)}>
                <span>這是內(nèi)容內(nèi)容內(nèi)容</span>
            </Dialog>,
            this.container
        )
    }
    componentDidMount() {
        this.container = document.createElement('div');
        $(this.container).addClass("global-hide");
        document.body.appendChild(this.container);
        this.appendToBody()
    }
    componentDidUpdate() {
        this.appendToBody()
    }
    componentWillUnmount() {
        document.body.removeChild(this.container)
    }
    render(){
        return null;
    }
}

這樣我們就解決了第一個問題,那么接下來我們要怎樣調(diào)用這個組件呢?

下面是調(diào)用對話框的父組件

//啟動對話框,選擇職業(yè),開始考試
class BeginExamComponent extends Component{
    constructor(props){
        super(props);
    }
    //使用函數(shù)在render中動態(tài)創(chuàng)建組件
    renderDialog(){
        if (this.props.isShow){
            console.log("開始創(chuàng)建對話框組件");
            return(//將關閉對話框的方法傳遞下去
                <DialogCenter onClickCancle={this.props.onButtonClose.bind(this)}/>
            )
        }else{
            return null;//這里實際上就是所謂的刪除組件
        }
    }
    render(){
        return(
            <div className="begin-exam-area">
                <div className="top-tips">點擊按鈕,請確認信息后開始考試</div>
                <div className="button-wrapper">
                    <button onClick={this.props.onButtonClick.bind(this)}>開始考試</button>//啟動對話框的函數(shù)
                    <button>模擬考試</button>
                </div>
                {this.renderDialog()}
            </div>
        )
    }
}

這里我們可以看到,我們使用了一個renderDialog函數(shù)在render中動態(tài)創(chuàng)建對話框組件,之所以可以這樣直接寫進去,主要是我們之前的DialogCenter組件實現(xiàn)了ReactDOM.unstable_renderSubtreeIntoContainer方法,因此這個組件將會直接在body直接子節(jié)點中渲染。

export class Home extends Component{

    constructor(){
        super();
        this.state={
           showDialog:false
        }
    }

    showDialog(){
        console.log("調(diào)用對話框");
        this.setState({
            showDialog:true
        })
    }

    closeDialog(){
        console.log("卸載對話框");
        this.setState({
            showDialog:false
        })
    }
    render(){
        return(
            <div>
               <HomeHeader avatarUid={this.props.account}/>
                <SearchArea/>
                <BeginExamComponent onButtonClick={this.showDialog.bind(this)} onButtonClose={this.closeDialog.bind(this)} isShow={this.state.showDialog}/>
            </div>
        )
    }
}

通過State控制組件的創(chuàng)建與否,就目前來看是創(chuàng)建對話框組件的核心。從這里可以實現(xiàn)很多有意思的東西,就看怎么去琢磨了。

總結

到此這篇關于React創(chuàng)建對話框組件的文章就介紹到這了,更多相關React創(chuàng)建對話框組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • React Router中Link和NavLink的學習心得總結

    React Router中Link和NavLink的學習心得總結

    這篇文章主要介紹了React Router中Link和NavLink的學習心得總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 詳解React?ISR如何實現(xiàn)Demo

    詳解React?ISR如何實現(xiàn)Demo

    這篇文章主要為大家介紹了React?ISR如何實現(xiàn)Demo詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • React報錯信息之Expected?an?assignment?or?function?call?and?instead?saw?an?expression

    React報錯信息之Expected?an?assignment?or?function?call?and?

    這篇文章主要介紹了React報錯之Expected?an?assignment?or?function?call?and?instead?saw?an?expression,下面有兩個示例來展示錯誤是如何產(chǎn)生的,需要的朋友可以參考下
    2022-08-08
  • IntersectionObserver實現(xiàn)加載更多組件demo

    IntersectionObserver實現(xiàn)加載更多組件demo

    這篇文章主要為大家介紹了IntersectionObserver實現(xiàn)加載更多組件demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 詳解React 和 Redux的關系

    詳解React 和 Redux的關系

    這篇文章主要為大家介紹了React 和 Redux的關系,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • React實現(xiàn)基于Antd密碼強度校驗組件示例詳解

    React實現(xiàn)基于Antd密碼強度校驗組件示例詳解

    這篇文章主要為大家介紹了React實現(xiàn)基于Antd密碼強度校驗組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • React中的setState使用細節(jié)和原理解析(最新推薦)

    React中的setState使用細節(jié)和原理解析(最新推薦)

    這篇文章主要介紹了React中的setState使用細節(jié)和原理解析(最新推薦),前面我們有使用過setState的基本使用, 接下來我們對setState使用進行詳細的介紹,需要的朋友可以參考下
    2022-12-12
  • React Native功能豐富的Toast通知庫

    React Native功能豐富的Toast通知庫

    這篇文章主要為大家介紹了React Native功能豐富的Toast通知庫使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • react-redux多個組件數(shù)據(jù)共享的方法

    react-redux多個組件數(shù)據(jù)共享的方法

    這篇文章主要介紹了react-redux多個組件數(shù)據(jù)共享的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • React onClick/onChange傳參(bind綁定)問題

    React onClick/onChange傳參(bind綁定)問題

    這篇文章主要介紹了React onClick/onChange傳參(bind綁定)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論

永川市| 曲周县| 南和县| 屏南县| 革吉县| 华蓥市| 左权县| 长泰县| 呼玛县| 双峰县| 曲阳县| 丹东市| 西峡县| 增城市| 乐至县| 绥德县| 旬阳县| 日喀则市| 于田县| 霸州市| 喀喇沁旗| 即墨市| 资溪县| 聊城市| 建德市| 成都市| 旌德县| 石楼县| 黄陵县| 雷州市| 辉南县| 开鲁县| 涡阳县| 建始县| 清苑县| 潢川县| 常宁市| 杭州市| 赤水市| 巴林左旗| 观塘区|