在 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 相关文章推荐
js 获取后台的字段 改变 checkbox的被选中的状态 代码
Jun 05 Javascript
一行命令搞定node.js 版本升级
Jul 20 Javascript
JavaScript中提前声明变量或函数例子
Nov 12 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
Mar 06 Javascript
EasyUI Pagination 分页的两种做法小结
Jul 09 Javascript
angularjs 源码解析之injector
Aug 22 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
Dec 25 Javascript
用 js 的 selection range 操作选择区域内容和图片
Apr 18 Javascript
JavaScript基础之流程控制语句的用法
Aug 31 Javascript
Vue入门之数据绑定(小结)
Jan 08 Javascript
Vue 路由 过渡动效 数据获取方法
Jul 31 Javascript
Vue 实现列表动态添加和删除的两种方法小结
Sep 07 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常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
numpy数组广播的机制
2019/07/12 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
毕业生个人求职信范文分享
2014/01/05 职场文书
小学新教师培训方案
2014/02/03 职场文书
会议主持词
2014/03/17 职场文书
村级四风对照检查材料
2014/08/24 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
大学辅导员述职报告
2015/01/10 职场文书
离职证明格式样本
2015/06/12 职场文书
mongodb的安装和开机自启动详细讲解
2021/08/02 MongoDB
Python中的 Set 与 dict
2022/03/13 Python
Python中第三方库Faker的使用详解
2022/04/02 Python
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers