在 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 select下拉框操作常用方法
Nov 09 Javascript
jQuery事件绑定与解除绑定实现方法
Apr 15 Javascript
javascript无刷新评论实现方法
May 13 Javascript
基于jquery实现轮播焦点图插件
Mar 31 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
JS去除空格和换行的正则表达式(推荐)
Jun 14 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
Sep 01 Javascript
vue.js中$watch的用法示例
Oct 04 Javascript
实战node静态文件服务器的示例代码
Mar 08 Javascript
vue.js编译时给生成的文件增加版本号
Sep 17 Javascript
详解vue项目中调用百度地图API使用方法
Apr 25 Javascript
在 Vue 中编写 SVG 图标组件的方法
Feb 24 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
PHP4中session登录页面的应用
2008/07/25 PHP
PHP 编程安全性小结
2010/01/08 PHP
一道关于php变量引用的面试题
2010/08/08 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
2014/06/30 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
Python理解递归的方法总结
2019/01/28 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
python 错误处理 assert详解
2020/04/20 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
小学五年级学生评语
2014/04/22 职场文书
小学六年级学生评语
2014/04/22 职场文书
积极向上的团队口号
2014/06/06 职场文书
小学班主任事迹材料
2014/12/17 职场文书
大学生操行评语大全
2014/12/31 职场文书
学习经验交流会策划书
2015/11/02 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis