Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.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 如何修复在同一路由上重新加载页面时重新加载组件?_Javascript_Reactjs - Fatal编程技术网

Javascript 如何修复在同一路由上重新加载页面时重新加载组件?

Javascript 如何修复在同一路由上重新加载页面时重新加载组件?,javascript,reactjs,Javascript,Reactjs,我有一个组件,它是一个子组件。它有自己的路线。当我尝试重新加载此路由上的页面时,此组件会自动更新两次而不是一次。如何修复它?它正在获取资源并获取两次信息,而不是一次 我试着给父组件添加一些逻辑,这样它就可以通过我需要的道具,但它已经通过路由器了 const ItemDetails = (props) => { const countryService = new CountryService(); const [country, setCountry] = useState('')

我有一个组件,它是一个子组件。它有自己的路线。当我尝试重新加载此路由上的页面时,此组件会自动更新两次而不是一次。如何修复它?它正在获取资源并获取两次信息,而不是一次

我试着给父组件添加一些逻辑,这样它就可以通过我需要的道具,但它已经通过路由器了

const ItemDetails = (props) => {
  const countryService = new CountryService();
  const [country, setCountry] = useState('');
  const [code, setCode] = useState(props.match.params.code);

  useEffect(() => {
    setCode(props.match.params.code)
    updateCountry()
  }, [])

  const updateCountry = () => {
    countryService
      .getByName(code.toLowerCase())
      .then((country) => {
        setCountry(country)
      })
  }

  return (
    <ItemView country={country}/>
  )
}
const ItemDetails=(道具)=>{
const countryService=new countryService();
const[country,setCountry]=useState(“”);
const[code,setCode]=useState(props.match.params.code);
useffect(()=>{
设置代码(props.match.params.code)
updateCountry()
}, [])
const updateCountry=()=>{
乡村服务
.getByName(代码.toLowerCase())
.然后((国家)=>{
国家(国家)
})
}
返回(
)
}

我希望组件只获得一次信息

我已经将状态[loaded,setLoaded]添加到我的应用程序组件中,以便在它获得信息后将loaded设置为true。首次加载的Item details呈现时的默认值为false,并且不更新国家()


你能在codesandbox上添加工作代码吗?该组件位于“项目详细信息”文件夹中
  useEffect(() => {
    if (props.isLoaded) {
      updateCountry(props.match.params.code);
    }
  }, []);