reactjs - 输入单个字符后表单失去焦点?
问题描述
我创建了一个带有状态的表单,但是在输入每个字符后,表单都会失去焦点。我意识到它是因为状态导致表单重新呈现我如何逃避这个?
import axios from 'axios'
const App = () => {
const [countries,setCountries] =useState([])
const [ newName,setnewName ] = useState('')
useEffect(()=>{
axios.get('https://restcountries.eu/rest/v2/all')
.then(response=>{
setCountries(response.data)
})
},[])
const handleChange = (event) =>{
setnewName(event.target.value)
}
const Finder = ()=>{
return(
<div>
<form>
<div>
Find country : <input value={newName} onChange={handleChange} />
</div>
</form>
</div>
)
}
return(
<div>
<p>Meow</p>
<Finder/>
</div>
)
}
export default App```
解决方案
当您渲染Finder
为组件时,它将在每个渲染上创建一个新函数,而不是当您在组件内渲染它时调用它,function
如下所示
尝试将 return 语句更改为
return(
<div>
<p>Meow</p>
{Finder()}
</div>
)
请通过此沙箱以供参考
推荐阅读
- python - plotly-dash:使用 google places / mapbox api 在下拉列表/文本字段中自动完成地址
- javascript - onmouseclick 函数 javascript/html
- php - 使用 Laravel 将对象转换为数组
- swiftui - 如何使用 ForEach 从数组中创建 TextFields?
- discord.py - 获取消息上的反应列表 discord.py
- javascript - 如何在不禁用ckeditor工具栏的情况下禁用写作?
- javascript - 为什么 Java Script 嵌套循环出错了?
- logback - 如何使用带有 Logback 的 SLF4J MDC 指定 MDC 字段类型?
- java - 在android studio中接收IMEI时显示错误
- php - Laravel 检查多个字段的唯一验证