Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果相同的URL,react router dom history.replace不会重新呈现组件_Javascript_Reactjs_React Hooks_React Router Dom - Fatal编程技术网

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])