不借助webpack,直接搭建一个 react

118 阅读1分钟

不借助webpack,直接搭建一个 react

其时挺好搭建的,样式就直接写在head中:


<!DOCTYPE html>

<html>

<head>

<script src="https://unpkg.com/react@17/umd/react.production.min.js" crossorigin></script>

<script src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js" crossorigin></script>

<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

</head>

<body>

<div id="root"></div>

</body>

<script type="text/babel">

const { useMemo } = React



function Button ({ handleClick }) {

return <button onClick={ handleClick }> btn</button>

}

function Alert ({ isVisit }) {

return isVisit ? (

<div>this is a alert!</div>

) : null

}



// useMemo: 类似于 computed,数据缓存

function TestMemo () {

const [count, setCount] = useState(1);

const [val, setValue] = useState('');

const expensive = useMemo(() => {

console.log('compute');

let sum = 0;

for (let i = 0; i < count * 100; i++) {

sum += i;

}

return sum;

}, [count]);

return <div>

<h4>{count}-{expensive}</h4>

{val}

<div>

<button onClick={() => setCount(count + 1)}>+c1</button>

<input value={val} onChange={event => setValue(event.target.value)}/>

</div>

</div>;

}

// useCallback: 为了减少子组件不必要的渲染

const TestCallback = React.memo(function TestCallback ({ value, changeValue }) {

return (

<div>

<h3>测试callback</h3>

<button onClick={ changeValue }>改变有关数据</button>

<p>与 Message 渲染有关的 数据 { value }</p>

</div>

)

})



</script>

<script type="text/babel">

const { useState, useEffect, useCallback } = React

function App () {

const [ isVisit, setIsVisit ] = useState(false)

const [ value, setValue ] = useState(123)

const handleClick = function () {

setIsVisit(true)

}

const changeValue = useCallback(() => {

setValue(value => value + 1)

}, [])

return (

<div>

<h1>Hello, world!</h1>

<Button handleClick={ handleClick }/>

<Alert isVisit={ isVisit }/>

<TestMemo/>

<TestCallback value={ value } changeValue={ changeValue }/>

</div>

)

}



ReactDOM.render(<App/>, document.getElementById('root') );

</script>



</html>

总结:入门级例子,这里采用 react hooks 展示了一下。webpack 打包把有用的信息进行整合归纳,这里,我们常用的 useState,useEffect,useMemo,useCallback,缺少 useRef

这里,useRef对象,在组件整个钩子中都保持不变,于是可以保存一些实例属性,还有就是 DOM 的获取