在 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 Archive Network 集合
May 12 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
May 26 Javascript
JavaScript 判断日期格式是否正确的实现代码
Jul 04 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
Mar 25 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
Oct 22 Javascript
原生JS轮播图插件
Feb 09 Javascript
javascript  数组排序与对象排序的实例
Jul 17 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
Aug 29 jQuery
Vuejs实现购物车功能
Nov 05 Javascript
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
js实现简单扫雷
Nov 27 Javascript
JS PHP字符串截取函数实现原理解析
Aug 29 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
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
纯javascript版日历控件
2016/11/24 Javascript
javascript基础知识讲解
2017/01/11 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
Node 代理访问的实现
2019/09/19 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
python处理cookie详解
2014/02/07 Python
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
初三家长会邀请函
2014/01/18 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
滞留工资返还协议书
2014/10/19 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
培训班通知
2015/04/25 职场文书
电话营销开场白
2015/05/29 职场文书
主题班会开场白
2015/06/01 职场文书
师德培训心得体会2016
2016/01/09 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android