首页 文章

React-router-dom push

提问于
浏览
3

所以我正在通过电子书学习反应js并坚持下去,

我不断收到错误:“无法读取属性'推送'未定义..”

我的App.jsx

import React from 'react';
import ReactDOM from 'react-dom';
import { HashRouter as Router, Route, Switch, Redirect, withRouter } from 'react-router-dom';

import IssueList from './IssueList.jsx';
import IssueEdit from './IssueEdit.jsx';

const contentNode = document.getElementById('contents');
const NoMatch = () =><p>Page Not Found</p>;

const RoutedApp = () => (
<Router>
    <Switch>
        <Route exact path="/" render={ () => <Redirect to="/issues" /> } />
        <Route exact path="/issues" component={withRouter(IssueList)} />
        <Route path="/issues/:id" component={IssueEdit} />
        <Route path="*" component={NoMatch} />
    </Switch>
</Router>
);

ReactDOM.render(<RoutedApp />, contentNode);

if(module.hot){
    module.hot.accept();
}

IssueList.jsx

...
import React from 'react';
import QueryString from 'query-string';
import 'whatwg-fetch';
import { Link } from 'react-router-dom';

...
export default class IssueList extends React.Component{
   constructor(props){
       super(props);
       this.state = { issues: [] };
       this.createIssue = this.createIssue.bind(this);
       this.setFilter = this.setFilter.bind(this);
   }

   setFilter(query){
       this.props.router.push({ pathname: this.props.location.pathname, query });
   }
}

有人能告诉我它有什么问题吗?

2 回答

  • 0

    您应该将组件包装在react-router中以访问history属性 . 所以你的 IssueList.jsx 应该是这样的:

    ...
    import React from 'react';
    import QueryString from 'query-string';
    import 'whatwg-fetch';
    import { withRouter } from 'react-router'
    import { Link } from 'react-router-dom';
    
    ...
    class IssueList extends React.Component{
       constructor(props){
           super(props);
           this.state = { issues: [] };
           this.createIssue = this.createIssue.bind(this);
           this.setFilter = this.setFilter.bind(this);
       }
    
       setFilter(query){
           this.props.history.push({ pathname: this.props.location.pathname, query });
       }
    }
    
    export default withRouter(IssueList)
    
  • 0

    得到它终于工作,感谢这篇文章:How do you programmatically update query params in react-router?

    ...
    import React from 'react';
    import QueryString from 'query-string';
    import 'whatwg-fetch';
    import { Link } from 'react-router-dom';
    
    ...
    export default class IssueList extends React.Component{
       constructor(props){
           super(props);
           this.state = { issues: [] };
           this.createIssue = this.createIssue.bind(this);
           this.setFilter = this.setFilter.bind(this);
       }
    
       setFilter(query){
           this.props.history.push({ 
               pathname: this.props.location.pathname, 
               search: '?' + QueryString.stringify(query) 
           });
       }
    }
    

相关问题