| @@ -1,31 +1,123 @@ | |||
| import logo from './logo.svg'; | |||
| import './App.css'; | |||
| import init, { greet } from "knmodel"; | |||
| import React, { useEffect } from 'react'; | |||
| import React, { useEffect, useState, useMemo } from 'react'; | |||
| var d = { | |||
| field: '就诊卡号11', | |||
| required: 1, | |||
| chiled: [ | |||
| { | |||
| field: '测试规则22', | |||
| required: 1, | |||
| chiled: [ | |||
| { | |||
| field: '就诊卡号33', | |||
| required: 1, | |||
| chiled: [ | |||
| { | |||
| field: '测试规则44', | |||
| required: 1, | |||
| chiled: [ | |||
| { | |||
| field: '就诊卡号', | |||
| required: 1, | |||
| chiled: [ | |||
| { | |||
| field: '测试规则', | |||
| required: 1, | |||
| chiled: [ | |||
| ] | |||
| } | |||
| ], | |||
| } | |||
| ] | |||
| } | |||
| ], | |||
| } | |||
| ] | |||
| }, | |||
| { | |||
| field: '测试规则22', | |||
| required: 1, | |||
| chiled: [ | |||
| { | |||
| field: '就诊卡号33', | |||
| required: 1, | |||
| chiled: [ | |||
| { | |||
| field: '测试规则44', | |||
| required: 1, | |||
| chiled: [ | |||
| { | |||
| field: '就诊卡号', | |||
| required: 1, | |||
| chiled: [ | |||
| { | |||
| field: '测试规则', | |||
| required: 1, | |||
| chiled: [ | |||
| ] | |||
| } | |||
| ], | |||
| } | |||
| ] | |||
| } | |||
| ], | |||
| } | |||
| ] | |||
| } | |||
| ], | |||
| }; | |||
| function App() { | |||
| const [data, setData] = useState(d); | |||
| useEffect(() => { | |||
| init().then(() => { | |||
| greet("Hello Tianya"); | |||
| // greet("Hello Tianya"); | |||
| }) | |||
| }, []) | |||
| function TreeNode(props) { | |||
| console.log(props); | |||
| const [idHash, setIdHash] = useState(new Date().getTime() + Math.round(Math.random() * 10000)) | |||
| const [nodeField, setNodeField] = useState(props.data.field) | |||
| const [nodeRequired, setNodeRequired] = useState(props.data.required) | |||
| const [nodeChiled, setNodeChiled] = useState(props.data.chiled) | |||
| // 这里只有子集变化了才更新 | |||
| const listItems = useMemo(() => { | |||
| return nodeChiled.map((item) => | |||
| <TreeNode data={item}></TreeNode> | |||
| ) | |||
| }, [nodeChiled]) | |||
| // 更新组件 | |||
| function handleOnClick() { | |||
| if (nodeRequired == 0) { | |||
| setNodeRequired(1) | |||
| } else { | |||
| setNodeRequired(0) | |||
| } | |||
| } | |||
| return ( | |||
| <div id={idHash} style={{ marginLeft: "30px" }}> | |||
| <h2>{nodeField}<a onClick={handleOnClick}>[{nodeRequired}]</a></h2> | |||
| <div>{listItems}</div> | |||
| </div> | |||
| ); | |||
| } | |||
| return ( | |||
| <div className="App"> | |||
| <header className="App-header"> | |||
| <img src={logo} className="App-logo" alt="logo" /> | |||
| <p> | |||
| Edit <code>src/App.js</code> and save to reload. | |||
| </p> | |||
| <a | |||
| className="App-link" | |||
| href="https://reactjs.org" | |||
| target="_blank" | |||
| rel="noopener noreferrer" | |||
| > | |||
| Learn React | |||
| </a> | |||
| </header> | |||
| <h1>Node</h1> | |||
| <hr></hr> | |||
| <TreeNode data={data}></TreeNode> | |||
| </div> | |||
| ); | |||
| } | |||