antd Modal組件銷毀屬性使用

Modal組件destroyOnClose屬性

destroyOnClose屬性在antd文檔上標(biāo)寫的說明時(shí)關(guān)閉時(shí)銷毀 Modal 里的子元素,默認(rèn)值為false累提。有關(guān)antd Modal相關(guān)參見下方鏈接

https://ant.design/components/modal-cn/

此屬性值不能對(duì)每種類型的組件值傳遞都適用,列出下面幾種情況磁浇,并展示出效果斋陪,以作參考展示該屬性的使用范圍,下面所說的父組件表示為包含destroyOnClose屬性的Modal所在的組件扯夭,子組件表示被包含在Modal中的組件

  • 要消除的值在父組件被定義鳍贾、在父組件中被使用

父組件代碼

import React from 'react';
import { Modal, Input } from 'antd';
import './index.styl';
export default class Test extends React.PureComponent {
    constructor(props) {
        super(props);
        this.state = {
            loading: false,
            visible: false,
            value: ''
        };
    }
    componentWillReceiveProps(nextProps) {
        const self = this;
        const { visible } = nextProps;
        const visiblePre = self.state.visible;
        if (visible && visible !== visiblePre) {
            self.setState({ visible });
        }
    }
    // 彈窗取消
    handleCancel = () => {
        const self = this;
        self.setState({ visible: false });
        self.props.handleCancel();
    }
    // input輸入改變
    handleChange = (e) => {
        const self = this;
        const value = e.target.value;
        self.setState({ value });
    }
    render() {
        const self = this;
        const { 
            visible, 
            value, 
        } = self.state;
        return (
            <Modal
                visible={visible}
                onOk={self.handleCancel}
                onCancel={self.handleCancel}
                title="destroyOnClose測(cè)試"
                destroyOnClose={true}
            >
                <div>
                    <Input 
                        placeholder="父組件"
                        value={value}
                        onChange={self.handleChange}
                    />
                </div>
            </Modal>
        );
    }
}

在下方將展示輸入效果(圖一)及點(diǎn)擊取消按鈕后再次進(jìn)入此彈窗的顯示(圖二)

圖一:輸入效果

圖一.png

圖二:銷毀驗(yàn)證

圖二.png

小結(jié):當(dāng)前情況下destroyOnClose屬性不起作用

  • 要消除的值在父組件被定義、在子組件中被使用

1交洗、父組件傳入的值只做子組件的初始值使用,值變化由子組件處理橡淑,并不回傳給父組件

父組件代碼

import React from 'react';
import { Modal, Input } from 'antd';
import './index.styl';
import Sub from '../Sub/index';
export default class Test extends React.PureComponent {
    constructor(props) {
        super(props);
        this.state = {
            loading: false,
            visible: false,
            value: ''
        };
    }
    componentWillReceiveProps(nextProps) {
        const self = this;
        const { visible } = nextProps;
        const visiblePre = self.state.visible;
        if (visible && visible !== visiblePre) {
            self.setState({ visible });
        }
    }
    // 彈窗取消
    handleCancel = () => {
        const self = this;
        self.setState({ visible: false });
        self.props.handleCancel();
    }
    render() {
        const self = this;
        const { 
            visible, 
            value, 
        } = self.state;
        return (
            <Modal
                visible={visible}
                onOk={self.handleCancel}
                onCancel={self.handleCancel}
                title="destroyOnClose測(cè)試"
                destroyOnClose={true}
            >
                <div>
                    <Sub 
                        value={value}
                    />
                </div>
            </Modal>
        );
    }
}

子組件代碼

import React from 'react';
import { Input } from 'antd';

export default class ImgDisplay extends React.PureComponent {
    constructor(props) {
        super(props);
        this.state = {
            value: props.value
        };
    }
    handleChange = (e) => {
        const self = this;
        const value = e.target.value;
        self.setState({ value });
    }
    render() {
        const self = this;
        const { value } = self.state;
        return (
            <Input 
                placeholder="子組件輸入"
                value={value}
                onChange={self.handleChange}
            />
        );
    }
}

在下方將展示輸入效果(圖一)及點(diǎn)擊取消按鈕后再次進(jìn)入此彈窗的顯示(圖二)

圖一:輸入效果

二圖一.png

圖二:銷毀驗(yàn)證

二圖二.png

2构拳、父組件傳值給子組件,并且此值的變化在父組件中做處理,子組件只負(fù)責(zé)展示

父組件代碼

import React from 'react';
import { Modal, Input } from 'antd';
import './index.styl';
import Sub from '../Sub/index';
export default class Test extends React.PureComponent {
    constructor(props) {
        super(props);
        this.state = {
            loading: false,
            visible: false,
            value: ''
        };
    }
    componentWillReceiveProps(nextProps) {
        const self = this;
        const { visible } = nextProps;
        const visiblePre = self.state.visible;
        if (visible && visible !== visiblePre) {
            self.setState({ visible });
        }
    }
    // 彈窗取消
    handleCancel = () => {
        const self = this;
        self.setState({ visible: false });
        self.props.handleCancel();
    }
    // input輸入改變
    handleChange = (e) => {
        const self = this;
        const value = e.target.value;
        self.setState({ value });
    }
    render() {
        const self = this;
        const { 
            visible, 
            value, 
        } = self.state;
        return (
            <Modal
                visible={visible}
                onOk={self.handleCancel}
                onCancel={self.handleCancel}
                title="destroyOnClose測(cè)試"
                destroyOnClose={true}
            >
                <div>
                    <Sub 
                        value={value}
                        handleChange={self.handleChange}
                    />
                </div>
            </Modal>
        );
    }
}

子組件代碼

import React from 'react';
import { Input } from 'antd';

export default class ImgDisplay extends React.PureComponent {
    constructor(props) {
        super(props);
        this.state = {
            value: ''
        };
    }
    componentWillReceiveProps(nextProps) {
        const self = this;
        const { value } = nextProps;
        const valuePre = self.state.value;
        if (value && value !== valuePre) {
            self.setState({ value });
        }
    }
    // handleChange = (e) => {
    //     const self = this;
    //     const value = e.target.value;
    //     self.setState({ value });
    // }
    render() {
        const self = this;
        const { value } = self.props;
        return (
            <Input 
                placeholder="子組件輸入"
                value={value}
                onChange={self.props.handleChange}
            />
        );
    }
}

在下方將展示輸入效果(圖一)及點(diǎn)擊取消按鈕后再次進(jìn)入此彈窗的顯示(圖二)

圖一:輸入效果

3圖3.png

圖二:銷毀驗(yàn)證

3圖四.png

小結(jié):當(dāng)父組件做值處理時(shí)置森,destroyOnClose屬性不起作用斗埂;當(dāng)子組件處理數(shù)值時(shí)destroyOnClose屬性能起到銷毀modal彈窗中值的作用

  • 要消除的值在子組件被定義、在子組件中被使用

父組件代碼

import React from 'react';
import { Modal, Input } from 'antd';
import './index.styl';
import Sub from '../Sub/index';
export default class Test extends React.PureComponent {
    constructor(props) {
        super(props);
        this.state = {
            loading: false,
            visible: false,
        };
    }
    componentWillReceiveProps(nextProps) {
        const self = this;
        const { visible } = nextProps;
        const visiblePre = self.state.visible;
        if (visible && visible !== visiblePre) {
            self.setState({ visible });
        }
    }
    // 彈窗取消
    handleCancel = () => {
        const self = this;
        self.setState({ visible: false });
        self.props.handleCancel();
    }
    render() {
        const self = this;
        const { 
            visible, 
        } = self.state;
        return (
            <Modal
                visible={visible}
                onOk={self.handleCancel}
                onCancel={self.handleCancel}
                title="destroyOnClose測(cè)試"
                destroyOnClose={true}
            >
                <div>
                    <Sub />
                </div>
            </Modal>
        );
    }
}

子組件代碼

import React from 'react';
import { Input } from 'antd';

export default class ImgDisplay extends React.PureComponent {
    constructor(props) {
        super(props);
        this.state = {
            value: ''
        };
    }
    handleChange = (e) => {
        const self = this;
        const value = e.target.value;
        self.setState({ value });
    }
    render() {
        const self = this;
        const { value } = self.state;
        return (
            <Input 
                placeholder="子組件輸入"
                value={value}
                onChange={self.handleChange}
            />
        );
    }
}

在下方將展示輸入效果(圖一)及點(diǎn)擊取消按鈕后再次進(jìn)入此彈窗的顯示(圖二)

圖一:輸入效果

4圖1.png

圖二:銷毀驗(yàn)證

4圖2.png

小結(jié):在此情況下destroyOnClose屬性能起到銷毀modal彈窗中值的作用

  • 總結(jié)

想要被消除的數(shù)據(jù)如果是在與modal相同的組件中做值的處理凫海,即值的動(dòng)態(tài)變化呛凶,那么當(dāng)關(guān)閉彈窗時(shí)destroyOnClose不會(huì)起作用消除當(dāng)前的值。而當(dāng)值處理行贪,即值的動(dòng)態(tài)變化在modal彈窗內(nèi)容下的子組件時(shí)漾稀,當(dāng)彈窗關(guān)閉時(shí)destroyOnClose起作用銷毀當(dāng)前值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末建瘫,一起剝皮案震驚了整個(gè)濱河市崭捍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啰脚,老刑警劉巖殷蛇,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異橄浓,居然都是意外死亡粒梦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門荸实,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谍倦,“玉大人,你說我怎么就攤上這事泪勒≈缰” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵圆存,是天一觀的道長(zhǎng)叼旋。 經(jīng)常有香客問我,道長(zhǎng)沦辙,這世上最難降的妖魔是什么夫植? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮油讯,結(jié)果婚禮上详民,老公的妹妹穿的比我還像新娘。我一直安慰自己陌兑,他們只是感情好沈跨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兔综,像睡著了一般饿凛。 火紅的嫁衣襯著肌膚如雪狞玛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天涧窒,我揣著相機(jī)與錄音心肪,去河邊找鬼。 笑死纠吴,一個(gè)胖子當(dāng)著我的面吹牛硬鞍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戴已,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼固该,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了恭陡?” 一聲冷哼從身側(cè)響起蹬音,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎休玩,沒想到半個(gè)月后著淆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拴疤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年永部,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呐矾。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苔埋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜒犯,到底是詐尸還是另有隱情组橄,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布罚随,位于F島的核電站玉工,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏淘菩。R本人自食惡果不足惜遵班,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潮改。 院中可真熱鬧狭郑,春花似錦、人聲如沸汇在。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)趾疚。三九已至缨历,卻和暖如春以蕴,著一層夾襖步出監(jiān)牢的瞬間糙麦,已是汗流浹背辛孵。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赡磅,地道東北人魄缚。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像焚廊,于是被迫代替她去往敵國(guó)和親冶匹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 前言 您將在本文當(dāng)中了解到,往網(wǎng)頁(yè)中添加數(shù)據(jù),從傳統(tǒng)的dom操作過渡到數(shù)據(jù)層操作,實(shí)現(xiàn)同一個(gè)目標(biāo),兩種不同的方式....
    itclanCoder閱讀 25,820評(píng)論 1 12
  • vue概述 在官方文檔中咆瘟,有一句話對(duì)Vue的定位說的很明確:Vue.js 的核心是一個(gè)允許采用簡(jiǎn)潔的模板語(yǔ)法來聲明...
    li4065閱讀 7,234評(píng)論 0 25
  • 在實(shí)際開發(fā)工程化vue項(xiàng)目時(shí)嚼隘,基本都是使用單文件組件形式,即每個(gè).vue文件都是一個(gè)組件袒餐。最基本的就是UI組件了飞蛹,...
    老陳要上天閱讀 7,806評(píng)論 4 20
  • 光不知從何處而來 切割著房間 大腦還擁抱著殘夢(mèng) 前半關(guān)于數(shù)字 后半是濃霧彌漫的江南 雞鳴犬走 騰出手去放縱欲望 良...
    馮樵閱讀 374評(píng)論 0 1
  • 李笑來老師說“踐行才是改變的根本”,成甲老師說“能改變行動(dòng)的信息才是知識(shí)”灸眼,看了很多書卧檐,上了很多課,看了很...
    秀美之本閱讀 426評(píng)論 1 4