在 HTML 页面中使用 React的场景分析


Posted in Javascript onJanuary 18, 2022

该方案使用场景:在html页面中使用react,主js文件index.js和其它非react功能使用js模块化的方式开发,适合轻量级中小型应用

index.html代码:

引入react、react-dom、babel、moment、antd等

<!DOCTYPE html>
<html lang='zh-CN'>

<head>
    <title>React in HTML</title>

    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" href="libs/antd/antd.min.css">
    <link rel="stylesheet" href="css/index.css">

    <style type="text/css">

    </style>

    <script type="text/javascript" src="libs/jquery-1.9.1.js"></script>

    <script type="text/javascript" src="libs/react/react.production.min.js"></script>
    <script type="text/javascript" src="libs/react/react-dom.production.min.js"></script>
    <script type="text/javascript" src="libs/babel/babel.min.js"></script>
    <script type="text/javascript" src="libs/moment/moment-with-locales.min.js"></script>
    <script type="text/javascript" src="libs/antd/antd-with-locales.min.js"></script>

</head>

<body>
    <input id='btn' type="button" class="index-btn" value="显示React组件" />

    <script type="text/babel" src="components/HelloReact.jsx"></script>

    <script type="module" src="index.js"></script>
</body>

</html>

index.js代码:

import { ReactComponentContainer } from './ReactComponentContainer.js'

let isShow = true;
let helloReactContainer;

$('#btn').on('click', function () {
    if (isShow) {
        helloReactContainer = new ReactComponentContainer('helloReact', HelloReact, { name: 'React' });
        helloReactContainer.show();
        isShow = false;
        $(this).val('隐藏React组件');
    } else {
        helloReactContainer.hide();
        isShow = true;
        $(this).val('显示React组件');
    }
});

ReactComponentContainer.js代码:

该模块用于在html中显示隐藏react组件

class ReactComponentContainer {

    component
    componentProps
    componentContainerId

    constructor(componentContainerId, component, componentProps) {
        if ($('#' + componentContainerId).length == 0) {
            $('body').append('<div id="' + componentContainerId + '"></div>');
        }

        this.componentContainerId = componentContainerId;
        this.component = component;
        this.componentProps = componentProps;
    }

    render(isShow) {
        ReactDOM.render(
            React.createElement(
                antd.ConfigProvider,
                {
                    locale: antd.locales.zh_CN
                },
                React.createElement(this.component, Object.assign({ isShow: isShow }, this.componentProps))
            ),
            document.getElementById(this.componentContainerId)
        );
    }

    show() {
        this.render(true);
    }

    hide() {
        this.render(false);
    }

}

export { ReactComponentContainer }

HelloReact.jsx代码:

class HelloReact extends React.Component {
    dateFormat = 'YYYY-MM-DD'
    timeFormat = 'HH:mm:ss'

    constructor(props) {
        super(props);

        let now = new Date().valueOf();

        this.state = {
            dateStr: moment(now).format(this.dateFormat),
            timeStr: moment(now).format(this.timeFormat)
        }

        this.onChangeDate = this.onChangeDate.bind(this);
        this.onChangeTime = this.onChangeTime.bind(this);
        this.updateDatePickerAndTimePicker = this.updateDatePickerAndTimePicker.bind(this);
    }

    onChangeDate(date, dateString) {
        this.setState({ dateStr: dateString });
    }

    onChangeTime(time, timeString) {
        this.setState({ timeStr: timeString });
    }

    updateDatePickerAndTimePicker() {
        let now = new Date().valueOf();
        this.setState({
            dateStr: moment(now).format(this.dateFormat),
            timeStr: moment(now).format(this.timeFormat)
        });
    }

    render() {
        return <div style={{ display: this.props.isShow ? '' : 'none' }}>
            <h1>Hello {this.props.name}, Now is {this.state.dateStr} {this.state.timeStr}</h1>
            <antd.DatePicker onChange={this.onChangeDate} value={moment(this.state.dateStr, this.dateFormat)} />
             
            <antd.TimePicker onChange={this.onChangeTime} value={moment(this.state.timeStr, this.timeFormat)} />
            <br />
            <antd.Button type="primary" size="default" style={{ marginTop: '10px' }} onClick={this.updateDatePickerAndTimePicker} >更新日期时间控件值</antd.Button>
        </div>;
    }
}

效果图:

在 HTML 页面中使用 React的场景分析

浏览器按F12弹出DevTools,在Sources选项卡中可以看到组件代码,方便打断点调试

在 HTML 页面中使用 React的场景分析

遇到的问题:

无法使用es6的import语法导入react组件,es6的import和require.js都不认识jsx

react组件不是按需加载,只适合小型应用

Gitee代码地址:

https://gitee.com/s0611163/react-in-html

到此这篇关于在 HTML 页面中使用 React的文章就介绍到这了,更多相关html使用react内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
Javascript 相关文章推荐
Javascript 获取LI里的内容
Dec 17 Javascript
浅析JavaScript中两种类型的全局对象/函数
Dec 05 Javascript
使用JS取得焦点(focus)元素代码
Mar 22 Javascript
js数组操作常用方法
May 08 Javascript
教你用jquery实现iframe自适应高度
Jun 11 Javascript
jquery实现页面虚拟键盘特效
Aug 08 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
jQuery多级联动下拉插件chained用法示例
Aug 20 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
Sep 04 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
JavaScript正则替换HTML标签功能示例
Mar 02 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
Dec 21 Javascript
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 #Vue.js
浅谈JavaScript作用域
Dec 06 #Javascript
JavaScript流程控制(循环)
Dec 06 #Javascript
JavaScript流程控制(分支)
Dec 06 #Javascript
JavaScript实现队列结构过程
Dec 06 #Javascript
JavaScript实现栈结构详细过程
Dec 06 #Javascript
JavaScript实现优先级队列
Dec 06 #Javascript
You might like
SSI指令
2006/11/25 PHP
php 动态执行带有参数的类方法
2009/04/10 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
推荐11个实用Python库
2015/01/23 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
青蓝工程实施方案
2014/03/27 职场文书
车间质检员岗位职责
2015/04/08 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python