reactjs - onClickHandler 有时有效,有时无效 - React
问题描述
以下代码中的onClickHandler,在这个组件中,'SearchResult',有时工作,有时不工作。
我想不出任何逻辑可以解释为什么它在工作时工作,以及为什么它不工作,什么时候不工作。
我在 onClickHandler 的开头放置了一个调试器,当它不工作时,它根本没有到达调试器 - 这表明有时甚至没有调用该函数,我不能找出原因。
此外,我尝试将函数中的所有代码移动到 onClick 内联,但是,它根本不起作用。
此外,我尝试使用函数声明而不是箭头函数,但它的行为仍然相同——有时有效,有时无效……
这是网站,您可以在搜索框中查看自己的行为。
在这里您可以看到一段视频,展示它是如何不工作的,除了一次它确实有效
请帮忙。
有问题的组件:
import { useDispatch } from 'react-redux'
import { Col } from 'react-bootstrap'
import { getWeatherRequest } from '../redux/weather/weatherActions'
import { GENERAL_RESET } from '../redux/general/generalConstants'
const SearchResult = ({ Key, LocalizedName, setText }) => {
const dispatch = useDispatch()
const onClickHandler = () => {
dispatch({ type: GENERAL_RESET })
dispatch(
getWeatherRequest({
location: Key,
cityName: LocalizedName,
})
)
setText('')
}
return (
<Col className='suggestion' onClick={onClickHandler}>
{LocalizedName}
</Col>
)
}
export default SearchResult
这是父组件:
import React, { useState } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { Form } from 'react-bootstrap'
import { getAutoCompleteResultsRequest } from '../redux/autoComplete/autoCompleteActions'
import { AUTO_COMPLETE_RESET } from '../redux/autoComplete/autoCompleteConstants'
import SearchResult from './SearchResult'
const SearchBox = () => {
const [text, setText] = useState('')
const dispatch = useDispatch()
const autoComplete = useSelector((state) => state.autoComplete)
const { results } = autoComplete
const onChangeHandler = (e) => {
if (e.target.value === '') {
dispatch({ type: AUTO_COMPLETE_RESET })
setText('')
}
setText(e.target.value)
dispatch(getAutoCompleteResultsRequest(e.target.value))
}
const onBlurHandler = () => {
setTimeout(() => {
dispatch({ type: AUTO_COMPLETE_RESET })
setText('')
}, 100)
}
return (
<div className='search-box'>
<Form inline>
<div className='input-group search-md search-sm'>
<input
type='search'
name='q'
value={text}
onChange={onChangeHandler}
onBlur={onBlurHandler}
placeholder='Search Location...'
className='mr-sm-2 ml-sm-3 form-control'
/>
</div>
</Form>
<div className='search-results'>
{results &&
results.map((result) => {
return (
<SearchResult key={result.Key} {...result} setText={setText} />
)
})}
</div>
</div>
)
}
export default SearchBox
解决方案
我对您的代码进行了一些操作,看起来可能的解决方案可能是 SearchResult.js 中的以下添加:
const onClickHandler = (e) => {
e.preventDefault();
...
经过一些测试
请删除onBlurHandler
. 这似乎是onClickHandler
对结果的影响。
推荐阅读
- java - java.lang.IllegalStateException:无法解析公共 org.springframework.http.ResponseEntity 中的参数 [0]
- python - Pytest:自定义简短的测试摘要信息,删除文件路径
- c# - xamarin(ios)httpclient在没有互联网连接的情况下获取并发布到路由器
- flatbuffers - Flatbuffer gRPC 流定义(双向、服务器、客户端...)
- reactjs - npm run build 失败,退出状态为 1
- reactjs - 正确设置 React 应用程序以与 VS Code 中的其他开发人员一起工作
- python - 根据 django 中的组选择列表显示人员列表
- android - 约束布局版本 > 2.0.1 不遵循公会规则
- python - 初学者问题:过滤日期以匹配 Django 中另一个模型的日期
- javascript - 访问 b-table 槽中的父组件范围