Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 reactjs react路由器接收url中的更改_Javascript_Reactjs_React Router V4_React Router Dom - Fatal编程技术网

Javascript reactjs react路由器接收url中的更改

Javascript reactjs react路由器接收url中的更改,javascript,reactjs,react-router-v4,react-router-dom,Javascript,Reactjs,React Router V4,React Router Dom,我知道您可以使用this.props.match.params访问url中的参数id。我的问题是,您如何识别用户可能在url中操纵的更改? Ex:props中从路由器传递的原始url 用户填写页面,并将url参数id弄乱 例: 在调用api存储数据之前,有没有办法检查参数是否相同?我正在使用“react router dom”:“4.2.2”您可以比较路由所用组件的组件diddupdate钩子中的参数,以确定它何时更改 示例() 类MyComponent扩展组件{ componentDidUpd

我知道您可以使用this.props.match.params访问url中的参数id。我的问题是,您如何识别用户可能在url中操纵的更改? Ex:props中从路由器传递的原始url

用户填写页面,并将url参数id弄乱 例:


在调用api存储数据之前,有没有办法检查参数是否相同?我正在使用“react router dom”:“4.2.2”

您可以比较
路由所用组件的
组件diddupdate
钩子中的参数,以确定它何时更改

示例()

类MyComponent扩展组件{
componentDidUpdate(prevProps){
const prevPathParameter=prevProps.match.params.pathParameter;
const newPathParameter=this.props.match.params.pathParameter;
if(prevPathParameter!==newPathParameter){
log(“pathParameter已更改!”);
}
}
render(){
返回{this.props.match.params.pathParameter};
}
}
函数App(){
返回(
家
关于
);
}

谢谢您的帮助,但我仍然可以获得与prevPathParameter和const相同的pathParametersnewPathParameter@Christopher在我的回答中的示例中,
pathParameter
的值是否相同?这很奇怪。是的,我相信这与从路由器接收道具的组件有关。由于我们从未离开页面,PrevPathParameter等于newPathParameter,因为路由器从未将新的道具传递给组件
pathParameter changed,因此
pathParameter
已更改。是的,它会更改,但仅当从主页路径页面导航到关于路径页面时才会更改。在我的场景中,我不会导航到另一个页面。我会对表单做一些更改,并保持在同一页上
class MyComponent extends Component {
  componentDidUpdate(prevProps) {
    const prevPathParameter = prevProps.match.params.pathParameter;
    const newPathParameter = this.props.match.params.pathParameter;

    if (prevPathParameter !== newPathParameter) {
      console.log("pathParameter changed!");
    }
  }

  render() {
    return <h1> {this.props.match.params.pathParameter}</h1>;
  }
}

function App() {
  return (
    <Router>
      <div>
        <Link to="/home">Home</Link>
        <Link to="/about">About</Link>
        <Route path="/:pathParameter" component={MyComponent} />
      </div>
    </Router>
  );
}