Javascript 如果相同的URL,react router dom history.replace不会重新呈现组件
我已经创建了一个组件,在文本框上键入我正在重定向的位置,如下所示Javascript 如果相同的URL,react router dom history.replace不会重新呈现组件,javascript,reactjs,react-hooks,react-router-dom,Javascript,Reactjs,React Hooks,React Router Dom,我已经创建了一个组件,在文本框上键入我正在重定向的位置,如下所示 const Search = (props) => { const searchKeyDown = (e) => { if(e.key === 'Enter'){ if(e.target.value){ props.history.replace(`/search/${e.target.value}`) } else { alert('Search
const Search = (props) => {
const searchKeyDown = (e) => {
if(e.key === 'Enter'){
if(e.target.value){
props.history.replace(`/search/${e.target.value}`)
} else {
alert('Search cannot be empty')
}
}
}
return (
<React.Fragment>
Search <input type='text' placeholder='Search...' onKeyDown={(e) => {searchKeyDown(e)}}/>
</React.Fragment>
)
}
export default withRouter(Search)
const Search=(道具)=>{
const searchKeyDown=(e)=>{
如果(e.key=='Enter'){
如果(如目标值){
props.history.replace(`/search/${e.target.value}`)
}否则{
警报('搜索不能为空')
}
}
}
返回(
搜索{searchKeyDown(e)}}/>
)
}
使用路由器导出默认值(搜索)
但如果您更改下面文本框中的文本,我的组件将不会重新渲染。我使用useEffect检测状态更改,但不起作用。谁能帮帮我吗
我的全副武装是
const SearchData=(道具:任意)=>{
const searchText=props.match.params.searchText
常量[searchParams,setSearchParams]=useState(null)
useffect(()=>{
设置搜索参数(搜索文本)
},[])
useffect(()=>{
if(searchParams!==null)console.log(searchParams)
},[searchParams])
返回(
{searchParams}
)
}
您需要将搜索文本添加到useEffect中的依赖项数组中:
useEffect(()=>{
setSearchParams(searchText)
},[searchText])
在对searchText进行任何更改后,组件将重新呈现。让我在stackbliz中尝试一下thisWorks。将签入我的真实项目OK看起来像render works,但当我调用函数时,它显示的是最后一个内容,而不是新内容,原因可能是什么。我已经更新了我的stackblizIt。您的stackbliz现在不可用。stackbliz可用。你的建议如何解决我的问题
useEffect(()=>{
setSearchParams(searchText)
},[searchText])