2017-08-31 2 views
1

Ive erhielt einen einfachen Klick-Handler, die ein Objekt passiert (selectedPost) zu einer Aktion - unten ist die Komponente:Reagieren-redux-Router Push mit Aktion/Reduktions

class SearchBarContainer extends Component { 
    render() { 
    return (
     <div> 
      <div className="center-xs"> 
      <p>To get started, type in some keywords below</p> 
      </div> 
      <SearchBar onTermChange={this.props.actions.loadPosts} onNull={this.props.actions.nullPosts}/> 
      <PostList posts={this.props.posts} isFetching={this.props.isFetching} onClick={this.props.actions.selectPost}/> 
     </div> 
    ); 
    } 
} 

Hier ist die Aktion:

export function selectPost(post) { 
    return { 
    type: SELECT_POST, 
    payload: post 
    } 
} 

Was will ich zur gleichen Zeit tun, ist die uRL mit Push ändern/Produkt/foo aber ich kann nicht ganz herausfinden, wo ich diesen Code zu setzen - jede Hilfe dankbar

+0

definiert einen Spaß innerhalb Klasse die Strecke sowie der Aufruf die Aktion zu ändern und zu onClick zuweisen, im Innern, der Spaß die Route ändert die Aktion dann zuerst nennen. –

+1

Ah ja danke, das macht Sinn, könnten Sie vielleicht senden einige Beispielcode im noch kämpfen – rhysclay

+1

check @ shubhams Antwort wird es Ihr Problem lösen :) –

Antwort

1

Sie könnten es tun, indem ein Aufruf Funk tion onClick und dann innerhalb der Funktion

class SearchBarContainer extends Component { 
    selectPost = (post) => { 
     this.props.history.push('/product/foo'); 
     this.props.actions.selectPost(post) 
    } 
    render() { 
    return (
     <div> 
      <div className="center-xs"> 
      <p>To get started, type in some keywords below</p> 
      </div> 
      <SearchBar onTermChange={this.props.actions.loadPosts} onNull={this.props.actions.nullPosts}/> 
      <PostList posts={this.props.posts} isFetching={this.props.isFetching} onClick={this.selectPost}/> 
     </div> 
    ); 
    } 
} 
export default withRouter(SearchBarContainer); 
+0

Perfekt - vielen Dank. Die einzige zusätzliche Sache, die ich tun musste, war, das post-Objekt in die selectPost-Methode einzufügen: selectPost = (post) => { this.props.history.push ('/ product/foo'); this.props.actions.selectPost (Post); } – rhysclay

+0

Ich liebe diesen Ansatz, weil ich gerade Daten von Redux in die nächste Komponente so übergeben, ist das Laden sofort und auch brauche ich nicht einmal URL-Parameter für eine Netzwerkanforderung - daher/Produkt/foo – rhysclay

+0

Froh, es hat gut für Sie gearbeitet –