import React, {useState, useEffect, useRef} from 'react';const FileSearch = ({title, onFileSearch}) => { // 从props 取变量,父组件传值 const [ inputActive, setInputActive] = useState(false) const [value, setValue] = useState('') let node = useRef(null) // 获取dom节点 useEffect(() => { const handleInputEvent = (event) => { const {keyCode} = event if (keyCode === 13 && inputActive) { onFileSearch(value) } else if(keyCode === 27 && inputActive) { closeInput(event) } } document.addEventListener('keyup', handleInputEvent) return () => { document.removeEventListener('keyup', handleInputEvent) } }) // useEffect可以使用多个 useEffect(() => { if (inputActive) { node.current.focus() // 聚焦 } }, [inputActive]) const closeInput = (e) => { e.preventDefault() setInputActive(false) setValue('') } return ( <div className="alert alert-prim"> // 多个判断 { !inputActive && <div className="d-flex justify-content-between align-items-center"> <span>{title}</span> <button type='button' className="btn btn-primary" onClick={ () => {setInputActive(true)} } >搜索</button> </div> } { inputActive && <div className="row"> <input type="text" value={value} className="form-control col-8" ref={node} onChange={ e => setValue(e.target.value)} /> <button type='button' className="btn btn-primary col-4" onClick={closeInput} > 关闭 </button> </div> } </div> )}export default FileSearch
<FileSearch title="文档管理" onFileSearch={(a)=>{console.log(123, a)}}/>