老莫的笔记本  
  
查看: 314|回复: 0

论弹窗组件 Protals 【弹窗组件其实是我自己定义的】

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2022-5-10 15:21:41 | 显示全部楼层 |阅读模式
本帖最后由 周大胖子 于 2022-5-10 16:04 编辑

我个人在进行这章节学习的时候,发现这个玩意适合做弹窗;

比方说 在public/index.html 中 添加一个 <div id="other"></div>,那岂不是所有的弹窗组件 都可以通过这个组件当载体进行展示。


  1. import React from "react";
  2. import ReactDOM from 'react-dom';  // 额  最终还是引入的是这个,也不知道为啥
  3. // import { ReactDOM } from "react";  // 下面这个是系统提示生成的  不能用


  4. /**
  5. *  Protals:
  6. *  默认情况下,所有元素都会渲染到 root 元素中
  7. *  Protals提供了一种将元素渲染到其他元素中的能力
  8. *
  9. * createPortal()
  10. * 接收两个参数,需要渲染的内容、渲染到什么地方
  11. *
  12. * this.props.children 可以获取倒当前组件所有的子组件
  13. */
  14. class TestPortals extends React.PureComponent{
  15.     constructor(props){
  16.         super(props)
  17.     }

  18.     render(){
  19.         return ReactDOM.createPortal(this.props.children,document.getElementById("other"))
  20.         //  这个other 被我添加在public/index.html 的文件中 ,如果没有这个元素 就会报错

  21.         // return (
  22.         //     <section>
  23.         //         这事我的测试元素
  24.         //     </section>
  25.         // )
  26.     }
  27. }

  28. export default TestPortals;


复制代码




就这个类 随便哪个类 挂载的时候都可以选择展示出来 但是展示的位置会有点意外

class App extends React.Component{
  constructor(){
    super();
    this.state={
      name:'大力',
      age:31
    }
  }
  render(){
    return (
      <>
        主页
         {/* <Hdeder name={'王三岁'}  age={'29'} ></Hdeder> */}
         {/* <Hdeder  name={'王三岁'}  age={29} /> */}
         {/* <Footer  name={this.state.name}  age={this.state.age} appfun={this.appfun.bind(this)} ></Footer> */}
         {/* <Main></Main> */}
         <hr />
        {/* <ContextTemp></ContextTemp>
          <hr />
        <News></News>
        <hr />
        <Newdiff></Newdiff> */}
        {/* <NewRef></NewRef>
        <hr />
        <TFrom></TFrom>
        <hr /> */}
        <Hoc></Hoc>
        <hr />
        <TestPortals>
          <div>牛 哈哈哈 这个位置原来有问题 这是根据那个文件定位 所以即使写在 这里app.js,也会展示在页面最下方</div>
        </TestPortals>

        <NewFragment></NewFragment>
      </>
    )
  }


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表