antd modal怎么获取dom元素

antd modal怎么获取dom元素,第1张

componentDidMount() {

consolelog('22',ReactDOMfindDOMNode(thisrefsmode))

consolelog('22',ReactDOMfindDOMNode(thisrefsmode1))

}

<Modal title="Basic Modal" visible={true} ref="modal"

onOk={thisdel} onCancel={thisdel}

><div ref="modal1">

<p >some contents</p>

<p>some contents</p>

<p>some contents</p>

</div>

</Modal>

只能选到 modal1 选不到modal

不懂你获取dom元素 是那部分,如果是内部的可以,如查是 modal 框架的就不可以

1、创建元素节点

创建元素节点并且把节点作为

元素的子节点添加到DOM节点树上。先创建元素点,创建元素节点使用Jquery的工厂函数$()来完成,格式如下:$(html),该方法会根据传入的html字符串返回一个DOM对象,并将DOM对象包装成一个JQuery对象后返回。创建一个元素节点JQuery代码如下:

$li1=$("")

代码返回$li1就是一个由DOM对象包装成的JQuery对象。把新建节点添加到DOM树中JQuery代码如下:

$("ul")append($li1);

添加后页面中只能看到元素默认的"·",由于没有为节点添加文本所以只显示默认符号,下面创建文本节点。

PS:append()方法是添加DOM节点方法详见增--添加DOM节点。

2、创建文本节点

使用JQuery的工厂函数$()同样能够创建文本节点,创建文本节点的JQuery代码如下:

$li2=$("苹果");

代码返回$li2就是一个由DOM对象包装成JQuery对象,把新建的文本节点添加到DOM树中JQuery代码如下:

$("ul")append($li2);

添加后页面中能看到"·苹果",右键查看页面源码发现新加的文本节点没有title属性。下面方法创建带属性的节点。

3、创建属性节点

创建属性节点同元素节点、文本节点一样使用JQuery的工厂函数完成。创建属性节点的JQuery代码如下:

$li3=$("榴莲");

代码返回$li3也是一个由DOM对象包装成JQuery对象,把新建的属性节点添加到DOM树中JQuery代码如下:

$("ul")append($li3);

添加后页面中能看到"·榴莲",右键查看页面源码发现新加的属性节点有title='榴莲'属性。

import React from 'react'

import { render } from 'react-dom'

const About = ReactcreateClass({//})

const Inbox = ReactcreateClass({//})

const Home = ReactcreateClass({//})

const App = ReactcreateClass({

getInitialState() {

return {

route: windowlocationhashsubstr(1)

}

},

componentDidMount() {

windowaddEventListener('hashchange', () => {

thissetState({

route: windowlocationhashsubstr(1)

})

})

},

render() {

let Child

switch (thisstateroute) {

case '/about': Child = About; break;

case '/inbox': Child = Inbox; break;

default: Child = Home;

}

return (

<div>

<h1>App</h1>

<ul>

<li><a href="#/about">About</a></li>

<li><a href="#/inbox">Inbox</a></li>

</ul>

<Child/>

</div>

)

}

})

render(<App />, documentbody)

thisprops 对象的属性与组件的属性一一对应,但是有一个例外,就是 thispropschildren 属性。它表示组件的所有子节点

var NotesList = ReactcreateClass({render: function() {return (<ol>{ReactChildrenmap(thispropschildren, function (child) {return <li>{child}</li>;})}</ol>);}});ReactDOMrender(<NotesList><span>hello</span><span>world</span></NotesList>,documentbody);

上面代码的 NoteList 组件有两个 span 子节点,它们都可以通过 thispropschildren 读取,运行结果如下。

hello

world

这里需要注意, thispropschildren 的值有三种可能:如果当前组件没有子节点,它就是 undefined ;如果有一个子节点,数据类型是 object ;如果有多个子节点,数据类型就是 array 。所以,处理 thispropschildren 的时候要小心。 

React 提供一个工具方法 ReactChildren 来处理 thispropschildren 。我们可以用 ReactChildrenmap 来遍历子节点,而不用担心 thispropschildren 的数据类型是 undefined 还是 object。

在使用Typescript开发react应用时,如果不识别dom,那可能是由于没有安装对应的类型声明文件npm install @types/react-dom。下载完成后,重新编译即可识别dom元素。

react中生命周期函数主要分为三个阶段

1创建阶段

2运行阶段

3销毁阶段

先给你的props创建一个默认值  thisstate = {}

 thisstate = {}

thisstate是用来初始化组件的私有数据的,它定义在组件的consturctor构造器函数中,

thisstate会第一时间被初始化,因为class类中,只要new这个类,必然会调用consturctor构造器

      组件将要被创建(还没被创建,我们的数据将在这个阶段拿到。一般在这个阶段发送ajax请求)

    这个函数是组件的虚拟DOM元素,将要挂载到页面上的时候执行

    当执行到这个生命周期函数的时候,即将要开始渲染内存中的虚拟DOM了,当这个函数执行完,内存中就有了一个渲染好的虚拟DOM,但是页面上尚未真正的显示DOM元素呢。

render()

    创建虚拟DOM

componentDidMount()

    将虚拟DOM渲染到页面上

    在这个函数中,我们可以放心的 *** 作页面上需要 *** 作的DOM元素

    所以说我们如果想 *** 作DOM元素,最早只能在      componentDidMount() 中 *** 作。

    componentDidMount()是创建阶段的最后一个函数。

thissetState()     更改了state值,页面就会自动更新

通过状态或属性的改变,都会触发组件的更新

componentWillReceiveProps     

只有当外界传递给自组建的属性被修改了,才会触发这个钩子函数

shouleComponentUpdate

组件是否要被更新

在shouleComponentUpdate中,要求必须返回一个布尔值。

如果返回值为false,则不会执行后面的生命周期函数,而是直接退回了‘运行中’的状态。后面的render()没被调用,因此页面不会被更新,但是组件中的state状态,却被修改了。

componentWillUpdate

组件将要被更新,此时组件还没有被更新,此时得到的元素是页面上旧的dom元素。

thisref

render     

重新渲染内存中的虚拟DOM对象,此时获取到页面上的dom元素还是之前旧的dom元素

当render调用完毕,我们的虚拟DOM树已经和组件的state保持一直了,

componentDidUpdate   

页面更新完毕,新的dom已经画到(渲染到)页面上。

此时state中的数据,虚拟DOM,页面上的DOM都是最新的,此时就可以放心大胆的 *** 作了。

componentWillUnmount

在这个钩子函数中,组件尚可被使用,还没开始卸载

componentWillReceiveProps()

当父组件传递给子组件的props值发生变化的时候,就会触发这个钩子函数。

DOM结构:

<View style={stylescheckContainer}  ref='checkContainer' onLayout={({nativeEvent:e})=>thislayout(e)}> 

</View>

对应js方法:

layout=(e)=>{

      consolewarn(elayouty)  ;

      var UIManager = require('UIManager');

      consolewarn(etarget);

      UIManagermeasure(etarget, (x, y, width, height, left, top) => {

     consolewarn('x:'+x)

     consolewarn('y:'+y)

     consolewarn('width:'+width)

     consolewarn('height:'+height)

     consolewarn('left:'+left)

     consolewarn('top:'+top)

})

}

注意:View组件的onLayout(可以得到宽高和相对位置)配合UIManagermeasure(可以得到宽高和绝对位置)一起使用

附加知识点:

得到某一dom元素的节点值:

import {findNodeHandle} from 'react-native';

var nodeData = findNodeHandle(thisrefsname);

nodeData即为节点值

React提供的这个ref属性,表示为对组件真正实例的引用,其实就是ReactDOMrender()返回的组件实例;

ref 可以挂载到组件上也可以是dom元素上;

Q:ref属性可以设置为一个回调函数

React 支持给任意组件添加特殊属性。ref 属性接受一个回调函数,它在组件被加载或卸载时会立即执行。

Q:当给组件、H5标签添加 ref 属性后,此实例只能在当前组件中被访问到,父组件的 refs 中是没有此引用的,例如:

Q:获取ref引用组件对应的dom节点

不管ref设置值是回调函数还是字符串,都可以通过ReactDOMfindDOMNode(ref)来获取组件挂载后真正的dom节点。

但是对于html元素使用ref的情况,ref本身引用的就是该元素的实际dom节点,无需使用ReactDOMfindDOMNode(ref)来获取,该方法常用于React组件上的ref。

Q: thisrefs 和 ReactDOMfindDOMNode 的区别

Q:新版本的React已经不推荐我们使用ref string转而使用ref callback

以上就是关于antd modal怎么获取dom元素全部的内容,包括:antd modal怎么获取dom元素、react哪一阶段可以访问真实的dom、react router 怎么获取参数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9274114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存