react小Demo

在这里插入图片描述


<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>01.react 声明周期 Demo</title>
		<!-- 消失的 : desappear -->
		<!--  -->
		<!--  -->
		<!-- react页面 需要 自定义 1个容器 -->
		<!-- 准备好一个“容器” -->
		<div id="btn_desappear"></div>
	</head>
	<body>
		<!-- 按序引入, 顺序不能错, react会按照这个渲染 -->
		<!-- 引入react核心库 -->
		<script type="text/javascript" src="../js/react.development.js"></script>
		<!-- 引入react-dom,用于支持react操作DOM -->
		<script type="text/javascript" src="../js/react-dom.development.js"></script>
		<!-- 引入babel,用于将jsx转为js -->
		<script type="text/javascript" src="../js/babel.min.js"></script>

		<!-- type中的javascript需替换成babel, 用于提示此处编译为 JSX 格式 -->
		<script type="text/babel">
			// 用class创建组件, 组件是个对象, 因此是 {} ;
			// 注意: 组件名命名首字母大写; React和Component首字母大写;
			// 理解: 新建一个class类名为Life, 并继承React组件的方法;
			class Life extends React.Component {
				// state 两个作用:1存储一定的值 能被react使用; 2在它改变时 能被React监听到并且重新渲染
				// state? 为什么用{}包裹呢?.............
				state = { opacity: 0.1 };

				//在render函数中, 加入需求的静态标签代码
				//用在: 1初始化渲染时、2状态更新之后
				render() {
					//注意-书写规范:return到页面的标签, 最外侧"用括号包裹"
					//注意-语法规范:return到页面的标签, 最外侧 "有且只有一个 根标签" ; html标签不加引号包裹(react规定的);
					return (
						<div>
							{/** 注意-书写规范 : 行内样式用双花括号包裹  **/}
							{/** 注意-书写规范 : 行内样式用逗号隔开 行内样式的值需要加引号  **/}
							<h5 style={{ opacity: this.state.opacity, color: "#000" }}>每临大事有静气。</h5>
							<h5 style={{ opacity: this.state.opacity, color: "#000" }}>静而后能安,安而后能虑,虑而后能得。</h5>
							{/** 注意-语法规范 : onClick的C要大写  **/}
							{/** 注意-语法规范 : 点击方法用大括号包裹 {}  **/}
							{/** 注意-语法规范 : 方法如果加(), 可能会被自调用, 所以不能加()  **/}
							<button onClick={this.close}>关闭</button>
						</div>
					);
				}

				//组件挂载完毕
				componentDidMount() {
					console.log("组件挂载完毕, 渲染一次");
					this.timer = setInterval(() => {
						console.log("定时器");
						// 获取此刻的state的opacity值, 减减 , 如果opacity值为0时 重新赋值
						let { opacity } = this.state;
						opacity -= 0.1;
						if (opacity <= 0) opacity = 1;
						this.setState({ opacity });
					}, 500);
					// 组件被销毁后 定时器依旧会在执行? 需要在"生命周期componentWillUnmount"中清除定时器任务
				}

				// 销毁组件前,清除定时器
				componentWillUnmount() {
					//清除定时器
					clearInterval(this.timer);
				}

				//关闭按钮的方法
				close = () => {
					// 使用react的移除节点方法, 移除节点
					ReactDOM.unmountComponentAtNode(document.getElementById("btn_desappear"));
				};
			}

			//拿到Dom, 渲染组件到页面
			ReactDOM.render(<Life />, document.getElementById("btn_desappear"));
		</script>
	</body>
</html>


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是React Flow的一个基本示例,该示例使用自定义节点和连线样式,以及可拖动的节点和连线。你可以根据自己的需要进行修改和扩展。 ```jsx import React, { useState } from 'react'; import ReactFlow, { ReactFlowProvider, addEdge, removeElements, Controls, Background, } from 'react-flow-renderer'; const initialElements = [ { id: '1', type: 'input', data: { label: 'Input Node' }, position: { x: 250, y: 5 } }, { id: '2', type: 'default', data: { label: 'Node 2' }, position: { x: 100, y: 100 } }, { id: '3', type: 'default', data: { label: 'Node 3' }, position: { x: 400, y: 100 } }, { id: '4', type: 'output', data: { label: 'Output Node' }, position: { x: 250, y: 200 } }, { id: 'e1-2', source: '1', target: '2', animated: true }, { id: 'e2-3', source: '2', target: '3', animated: true }, { id: 'e3-4', source: '3', target: '4', animated: true }, ]; const nodeTypes = { input: ({ data }) => ( <div className="node-input"> {data.label} </div> ), default: ({ data }) => ( <div className="node-default"> {data.label} </div> ), output: ({ data }) => ( <div className="node-output"> {data.label} </div> ), }; const App = () => { const [elements, setElements] = useState(initialElements); const onElementsRemove = (elementsToRemove) => setElements((els) => removeElements(elementsToRemove, els)); const onConnect = (params) => setElements((els) => addEdge(params, els)); return ( <ReactFlowProvider> <div className="react-flow-wrapper"> <ReactFlow elements={elements} onElementsRemove={onElementsRemove} onConnect={onConnect} nodeTypes={nodeTypes} snapToGrid={true} snapGrid={[15, 15]} > <Controls /> <Background color="#888" gap={16} /> </ReactFlow> </div> </ReactFlowProvider> ); }; export default App; ``` 在上面的示例中,我们定义了一个最初包含四个节点和三个连接的元素数组。我们还定义了三种节点类型,分别是输入节点、默认节点和输出节点。 在ReactFlow组件中,我们将元素和节点类型传递给它,并指定了一些其他属性,如onElementsRemove和onConnect,用于删除和添加元素,以及snapToGrid和snapGrid,用于将节点对齐到网格上。 最后,我们使用ReactFlowProvider包装ReactFlow组件,以便在整个应用程序中共享ReactFlow的状态和功能。 如果你想要一个更复杂的示例,可以访问React Flow的官方网站,那里有许多其他示例和文档。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值