number在useEffect中打印结果,被多加了一次
来源:5-3 FileSearch 组件(二)

紫光丶
2020-11-11
const FileSearch = ({title, onFileSearch}) => {
const [inputActive, setInputActive] = useState(false);
const [value, setValue] = useState('');
const closeSearch = (e) => {
e.preventDefault();
setInputActive(false);
setValue('')
}
let num = useRef(0)
console.log('FileSearch-num-start,',num.current)
num.current++
console.log('FileSearch-num-end,',num.current)
useEffect(() => {
console.log('useEffect-num,',num.current)
const handleInputEvent = (event) => {
const {code} = event;//Escape ,Enter
if (code === 'Enter' && inputActive) {
onFileSearch(value)
} else if (code === 'Escape' && inputActive) {
closeSearch(event)
}
}
document.addEventListener('keyup', handleInputEvent)
return () => {
document.removeEventListener('keyup', handleInputEvent)
}
})
下面是控制台的打印结果:
写回答
2回答
-
同学你好 这是新版的 create-react-app 在根组件中添加了
<React.StrictMode> 这个节点。这个节点会造成渲染两次(开发环境下出现,为了更好的定位bug,生产环境不会出现这个问题)
main.js
ReactDOM.render( <React.StrictMode> <App /> </React.StrictMode>, rootElement );
把这个节点删除了,就正常了。参考我给你写好了代码:https://codesandbox.io/s/icy-meadow-kqhwz?file=/src/index.js
012020-11-14 -
张轩
2020-11-12
同学你好 请稍微描述的详细一点 后面触发的打印是什么样的操作触发的呢?是在 input 中输入内容嘛?如果能把这个文件所有的代码都提供给我就更好啦。
012020-11-12
相似问题