目标:让之前的mini-react使用jsx
pnpm create vite
命名vite-runner
选择vanilla,javascript
- 将之前的App.js,core文件夹,main.js拷贝进去,并将App.js修改成App.jsx
- 修改index.html中的路径和id
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/main.js"></script>
</body>
</html>
- 运行
pnpm install,然后启动,pnpm dev
修改app.jsx写法,可以正常运行,也可以通过打印看到React.createElement
- 我们也可以在/core/React.js中的进行打印发现确实调用了
import React from './core/React.js';
function AppOne() {
return <div id="xxx">aaa-bbbb</div>
}
const App = <div>aaa-bbbb</div>
console.log(AppOne);
export default App;
function createTextNode(text) {
console.log("createTextNode", text);
return {
type: "TEXT_ELEMENT",
props: {
nodeValue: text,
children: []
}
}
}
遗留问题1: main.js期望App写成<App/>
ReactDOM.createRoot(document.querySelector("#root")).render(App)
遗留问题2: 目前render函数用递归实现
- 假设dom树非常庞大浏览器会有卡顿,原因是什么,如何解决