在 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 拖放效果实现代码
Jan 22 Javascript
客户端限制只能上传jpg格式图片的js代码
Dec 09 Javascript
小米公司JavaScript面试题
Dec 29 Javascript
js实现九宫格图片半透明渐显特效的方法
Feb 16 Javascript
JavaScript生成的动态下雨背景效果实现方法
Feb 25 Javascript
微信jssdk在iframe页面失效问题的解决措施
Mar 03 Javascript
AngularJs $parse、$eval和$observe、$watch详解
Sep 21 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
Jan 04 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
JS数组的高级使用方法示例小结
Mar 14 Javascript
vue npm install 安装某个指定的版本操作
Aug 11 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开发中常用的字符串操作函数
2011/02/08 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
python3.5仿微软计算器程序
2020/03/30 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
怎么快速自学python
2020/06/22 Python
详解python对象之间的交互
2020/09/29 Python
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
优秀的计算机专业求职信范文
2013/12/27 职场文书
教师队伍管理制度
2014/01/14 职场文书
研修第一天随笔感言
2014/02/15 职场文书
就职演讲稿范文
2014/05/19 职场文书
入职担保书范文
2014/05/21 职场文书
员工团队活动方案
2014/08/28 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
门卫管理制度范本
2015/08/05 职场文书
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技
mysql sql常用语句大全
2022/06/21 MySQL