react-插槽(Portals)

react-插槽(Portals),第1张

第一个参数(child)是任何可渲染的 React 子元素,例如一个元素,字符串或 片段(fragment)。第二个参数(container)则是一个 DOM 元素。

对于 portal 的一个典型用例是当父组件有 overflow: hidden 或 z-index 样式,但你需要子组件能够在视觉上 “跳出(break out)” 其容器。例如,对话框以及提示框。

虽然一个portal可以插入到任何一个存在dom树中,但是通过Portal节点插入到其他dom中的节点,跟其他的React普通的子节点表现相同。在父节点下,通过Portal插入的子节点也可以共享context。

对于事件冒泡,从Portal节点中触发的事件,虽然可能改变了节点所处的位置,但是在HTML结构中的父包含节点是可以拿到这个事件的。

在上面的HTML结构中,通过Portal, 在Button真实位置是包含在“modal-root”下,但是因为在HTML的结构中Button所在的父节点的HTML结构是包含“app-root”中的,因此在“modal-root”中出发的事件,也可以冒泡到“app-root”中。

在实际使用过程中,通过Portal,我们可以在组件渲染的任何时候向任何地方插入组件,需要确保的是被插入的容器是真实的DOM,即可以用documentgetElementByXX 获取到的DOM。

1、前言

平时写react页面,可以在cmd或者terminal里面npm start /npm run start进行测试,如果想要打包放到服务器上,需要怎么做呢?

经过踩坑终于将自己的react页面放到的服务器上运行起来,并且通过自己的"ip:port//",可以在局域网内的电脑上跑起来的。

真实部署到云上或者公司服务器上还没有进行验证,因为想着和部署在本地步骤应该不差多少。

2、打包

在cmd/terminal里切到项目的工作控件下。

输入 npm run dist

等待生成dist文件夹。这就是最终打包好的资源文件夹。如果步骤出错了,需要根据线索自己排查- -!,

3、放到服务器上。

我的webapp项目是在intellij idea上建立的项目,配置tomcat步骤和新建项目步骤可以自行百度。很多前辈们写过相应的文章。当项目建立好之后,可以尝试跑一下看看界面是否为web目录下的indexhtml/indexjsp?文件里面的布局。

将dist文件复制到web项目的web文件夹之下。然后重新跑tomcat就好。

4、尝试

tomcat成功启动之后,在浏览器地址栏输入对应的地址就好。默认地址ip+端口/为web目录下文件夹名称。

也就是dist文件夹的名称可以改为自己的项目名称。

例如,dist不修改的话。我的地址为我的ip 例: >

步骤/方法

1设置计算机A的IP为19216812子网掩码为2552552550网关为19216911!

2

步骤阅读 3设置计算机B的IP为19216822子网掩码为2552552550网关为19216921!

4

步骤阅读 5给路由A的fastEthernet 0/0端口配置IP为19216811子网掩码为2552552550,由于路由默认的端口是关闭的,所以在给路由端口配置好IP以后,要注意用no shutdown(不关闭)命令把端口开启!如下是配置路由A端口fastEthernet 0/0的所有命令:

Continuewith configuration dialog [yes/no]: no

Router#configure terminal(进入全局配置模式)

Router(config)#interfacefastEthernet 0/0(进入端口模式,进入端口0/0了)

Router(config-if)#noshutdown(开启端口)

6

步骤阅读 7给路由A的fastEthernet 1/0端口配置IP为19216831子网掩码为2552552550,如下是配置路由A端口fastEthernet1/0的所有命令

Router(config-if)#exit(从0/0端口退回到全局配置模式)

Router(config)#interfacefastEthernet 1/0(进入1/0端口)

Router(config-if)#ipaddress 19216831 2552552550(给端口1/0配置好了IP跟子网掩码)

Router(config-if)#noshutdown(开启端口)

%LINK-5-CHANGED:Interface FastEthernet1/0, changed state to up

Router(config-if)#exit(从1/0端口退回到全局配置模式)

步骤阅读 8给路由B的fastEthernet 1/0端口配置IP为19216832子网掩码为2552552550,如下是配置路由B端口fastEthernet1/0的所有命令

Continuewith configuration dialog [yes/no]: no

Router>enable(进入特权模式)

Router#configure terminal(进入全局配置模式)

Enterconfiguration commands, one per lineEnd with CNTL/Z

Router(config)#interfacefastEthernet 0/0(进入端口模式,进入端口0/0了)

Router(config-if)#ipaddress 19216832 2552552550(给端口0/0配置好了IP,子网掩码)

Router(config-if)#noshutdown(开启端口)

步骤阅读 9给路由B的fastEthernet 0/0端口配置IP为19216821子网掩码为2552552550,如下是配置路由A端口fastEthernet1/0的所有命令

Router(config-if)#exit(从0/0端口退回到全局配置模式)

Router(config)#interface fastEthernet 1/0(进入1/0端口)

Router(config-if)#ip address 19216821 2552552550(给端口1/0配置好了IP跟子网掩码)

Router(config-if)#no shutdown(开启端口)

%LINK-5-CHANGED: Interface FastEthernet1/0, changed state to up

Router(config-if)#exit(从1/0端口退回到全局配置模式)

步骤阅读 10给路由B设置静态跳转,若遇到访问计算机A(也就是19216810)这个网段的数据包,给他规定了往路由A的1/0端口(也就是19216831)跳转,再在跳转后到达的路由查询路由表,查询计算机A(也就是19216810)的这个网段再转发数据包!具体命令如下:

Router(config)#iproute 19216810 2552552550 19216831(在全局配置模式下)

步骤阅读 11在路由A也设置一个跳转,要不数据发送出去了,找不到回来就路,那么就没返回信息了!具体命令如下:

Router(config)#iproute 19216820 2552552550 19216832(在全局配置模式下)

步骤阅读 12用ping命令测试全网是否连通了!如果前面的步骤你都没 *** 作错的话,那么现在的测试

谢谢

React提供的获取DOM元素的方法有两种,一是react-dom中的findDOMNode(),二是refs。

findDOMNode通常用于React组件的引用,其语法如下:

当组件被渲染到DOM中后,findDOMNode会返回该组件实例对应的DOM节点。

示例:

注:如果render()中返回null,那么findDOMNode()也返回null。findDOMNode只对已经挂载的组件有效。

refs多用于React组件内子组件的引用。使用ref获取DOM节点有两种情况:

(1)子组件为原生DOM组件:获取到的就是这个DOM节点。如下例,thisinput就获取到了当前 <input /> 节点。

通过thismyInput,我就可以对 <input /> 进行一系列 *** 作,比如让输入框聚焦:

注:refs也支持字符串格式:

通过thisrefsmyInput获取到节点。

(2)子组件为React组件,比如 <MyInput/> :获得的就是 <MyInput/> 的实例,因此就可以调用 <MyInput/> 的实例方法。

示例:

注:调用 <Comp /> 实例方法的方式:thisrefsmyCompmethod(),但并不建议这种调用方式。

1、在react中可以给输入控件(如input type=text)加上引用名,好获取它的输入值

例如:

2、<textarea >控件,它和input不同,它是开标签,内容是包括在<textarea >和</textarea>之间的。如果需要获取<textarea >的值,同样可以用ref来获取

例如:

注意:这里log出来的是页面用户输入后的最终文字。

3、单选radio和多选checkbox,获取它们的值最好还是用一个公共变量如state来保存,因为它们的值只能在触发事件中获取,不像text控件可以后期提交时获取。初始值可以通过 defaultChecked={true} 来设置。

radio例子:

如果是checkbox,用div包住不合适,因为div每次点击只能获取点击一次的值。所以checkbox需要写到每个checkbox 控件里面的onChange或onClick事件。可以通过一个state的数组来存储变更。checkbox例子:

使用fetch API,可以在fetch函数中添加第二个参数,可以设置mode和credentials,这样就可以获取>

目前很流行的方式是通过JQuery中的 AJAX 方法来获取数据,引入JQuery后使用 $ajax() 去访问特定的url地址,通过GET、POST等方式进行数据通信。本文中采用的方式是通过 Fetch 方法来进行数据通信,同样可以向后台服务器发起GET、POST等

以上就是关于react-插槽(Portals)全部的内容,包括:react-插槽(Portals)、React 打包部署、求react高人指点,不知道该怎么做路由跳转等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9740897.html

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

发表评论

登录后才能评论

评论列表(0条)

保存