我有以下钩子,用于在整个应用程序中构建响应式组件。
我正在研究实现服务器端渲染。
使用WindowWidth.js
import {useEffect, useRef, useState} from 'react';
function useWindowWidth() {
const hasResized = useRef(false);
const [windowSize,setWindowSize] = useState(window.innerWidth);
useEffect(() => {
function handleResize() {
if (hasResized.current === true) {
return;
}
hasResized.current = true;
throtled_forceUpdate();
}
function throtled_forceUpdate() {
setTimeout(()=>{
// console.log('I will be updated!');
// console.log(window.innerWidth);
setWindowSize(window.innerWidth);
hasResized.current = false;
},250);
}
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);
return windowSize;
}
export default useWindowWidth;
应用程序.js
import React from 'react';
import useWindowWidth from './hooks/useWindowWidth';
function App(props) {
const windowWidth = useWindowWidth();
return(
windowWidth > 1200 ?
<DesktopLayout/>
: <MobileLayout/>
);
}
ReactDOMServer
ReactDOMServer.renderToString(App);
当 ReactDOMServer 遇到这样的事情时,它的行为是什么?这种情况的解决方法是什么?