• 在项目中怎么使用react


    怎么使用react

    • 在网页中引入react
    • npm下载后在项目中引入react

    在网页中引入react

    addReact.html
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<script src="../js/react.min.js"></script>
    	    <script src="../js/react-dom.min.js"></script>
    	    <script src="../js/babel.js"></script>
    	</head>
    	<body>
    		<div id="example"></div>
    	</body>
    	<script type="text/babel" >
    		ReactDOM.render(
    			<h1>hello,react</h1>,
    			document.getElementById('example')
    		);
    	</script>
    </html>
    
    

    上面代码中需要连个地方注意,第一,在最后一个<script>标签中type="text/babel",这是因为在react中用到了jsx语法,跟JavaScript不兼容。凡是使用
    jsx的地方,都要加上type='text/babel'。其次上面用到了三个库react.min.js,react-dom.js,babel.js,他们必须首先加载。其中,react.js
    react的核心库,react-dom.js提供相关dom的功能,babel.js是将jsx转换成JavaScript语法。

    ReactDOM

    如果使用一个<script>标签引入React,所有的顶层API都能在全局ReactDOM上调用。react-dom.js提供了可在用用底层使用的DOM方法,如果有需要,你可以把这些
    方法用于React模型以外的地方。不错一般情况下,大部分组件都不需要使用这个模块。

    • render()
    • hydrate()
    • unmountCComponentAtNode()
    • findDOMNode()
    • createPortal()

    这里主要讲述render()方法

    render()

    React.render(element,container[,callback])
    

    在提供container里渲染一个React元素,并返回对该组件的引用(或者针对无状态组件返回null)。

    在上述demo中,返回的引用就是

    	<h1>hello,react</h1>
    

    如果React元素之前已经在container里渲染过,这会对其执行更新操作,并仅会在必要时改变DOM以映射最新的React元素

    注意:React.render()会控制你传入容器节点里的内容。档首次调用时,容器节点里的所有DOM元素都会被替换,后续的调用则会使用React的DOM差分算法(DOM diffing algorithm)
    进行高效的更新
    ReactDOM.render()不会修改容器节点(只会修改容器的子节点)。可以在不覆盖现有子节点情况下,将组件插入已有的DOM节点中。
    ReactDOM.render()目前会返回对根组件ReactComponent实例的引用,但是,目前应该避免使用返回的引用,因为他是历史遗留下来的问题,而且在未来的版本的React中
    ,组件渲染在某些情况写可能会是异步的。如果你真的需要活得对根组件ReactCompont实例的引用,那么推荐为根元素添加callback ref
    使用ReactDOM.render()对服务端渲染容器进行hydrate操作的方式已经被废弃,并且会在React17被移除。作为替代,请使用hydrate()
    如果提供了可选的回调函数,该回调将在组件被渲染或更新之后被执行

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<script src="../js/react.min.js"></script>
    	    <script src="../js/react-dom.min.js"></script>
    	    <script src="../js/babel.js"></script>
    	</head>
    	<body>
    		<div id="example"></div>
    	</body>
    	<script type="text/babel" >
    	ReactDOM.render(
    		<h1>hello,react</h1>,
    		document.getElementById('example')
    	)
    	setTimeout(()=>{
    		ReactDOM.render(
    			<div>add timer</div>,
    			document.getElementById('example')
    		)
    	},2000)
    	</script>
    </html>
    
    
    

    通过npm 引入到项目

    • 使用React官提供的脚手架用于初始化React项目,使用create-react-app
    • 从头开始创建一个React应用
    使用React官方提供的脚手架create-react-app

    执行

    #安装create-react-app并创建my-app
    npm install -g create-react-app
    create-react-app my-app
    #或者
    #npm版本在5.2.0+可以使用npx命令,
    npx create-react-app my-app
    
    #进入项目目录,启动项目
    cd my-app
    npm start
    
    从头开始创建一个React应用
    • 新建一个文件并命名叫demo
    • 在demo文件夹下执行cmd
    • 执行npm init -y (快速建立packge.json)
    • 执行npm install --save react react-dom
    • 在demo文件夹下新建文件夹并命名为src
    • 在src下新建文件并命名index.js
      index.js内容如下
       	import React from "react"
    	import ReactDOM from "react-dom"
    	const Index = () => {
    		return <div>Hello React!</div>
    	}
    	ReactDOM.render(<Index />,document.getElementById('index'));
    
    
    • 在demo文件夹新新建文件并命名为index.html
      index.html内容如下
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    	</head>
    	<body>
    		<div id="index"></div>
    	</body>
    </html>
    
    

    注意:如果就直接把index.js引入index.html中,会报错,Uncaught SyntaxError: Cannot use import statement outside a module

    所以我们还需要webpack对一些语法的转换(es6转换成es5,jsx转换成js)

    • npm install --save-dev webpack webpack-dev-server webpack-cli webpack-merge html-webpack-plugin clean-webpack-plugin babel-loader @babel/preset-react @babel/preset-env @babel/core
    • 在demo文件夹下新建文件webpack.base.conf.js webpack.dev.conf.js webpack.prod.conf.js
      webpack.base.conf.js内容如下
    const path = require("path");
    const HtmlWebpackPlugin = require("html-webpack-plugin");
    const {CleanWebpackPlugin} = require("clean-webpack-plugin");
    module.exports = {
    	entry:"./src/index.js",
    	output:{
    		filename:"bundle.js",
    		path:path.resolve(__dirname,"dist")
    	},
    	module:{
    		rules:[
    			{
    				test:/.(js|jsx)$/,
    				exclude:/node_modules/,
    				loader:"babel-loader"
    			}
    		]
    	},
    	plugins:[
    		new CleanWebpackPlugin(),
    		new HtmlWebpackPlugin({
    			title:"react",
    			template:"./index.html"
    		})
    	]
    }
    

    webpack.dev.conf.js内容如下

    const webpack = require("webpack");
    const merge = require("webpack-merge");
    const path = require("path");
    const common = require("./webpack.base.conf.js");
    module.exports = merge(common,{
    	mode:"development",
    	devtool:"inline-source-map",
    	plugins:[
    		new webpack.HotModuleReplacementPlugin(),
    	],
    	devServer:{
    		contentBase:path.join(__dirname,"dist"),
    		port:9000,
    		host:"localhost"
    	}
    })
    
    

    webpack.prod.conf.js内容如下

    const webpack = require("webpack");
    const merge = require("webpack-merge");
    const common = require("./webpack.base.conf.js");
    module.exports = merge(common,{
    	mode:"production",
    	devtool: 'source-map'
    })
    
    
    • 执行npm run dev 即可
  • 相关阅读:
    高可用、高并发浅析
    正则表达式笔记
    linux下通过脚本切换当前工作目录
    nginx学习笔记
    二进制安全
    负载均衡相关
    有用的shell命令
    TCP服务器/客户端代码示例
    UDP服务器/客户端代码示例
    GCC链接的几个注意点
  • 原文地址:https://www.cnblogs.com/dehenliu/p/12523329.html
Copyright © 2020-2023  润新知