2015-04-04 19 views
8

Tôi không thể tìm ra cách truy cập phương thức từ thành phần ReactJS gốc trong tuyến đường và thành phần post của mình. Sử dụng react-router.Làm thế nào để vượt qua cả this.state và this.props để định tuyến bằng cách sử dụng phản ứng-router

Đây là trong <RouteHandler {...this.state} />

Phương pháp/chức năng pushToPostList() ở thêm một đối tượng đường bưu điện đến một mảng, tổ chức tại this.state.myList.

Đang cố gắng để có được thành phần <Post /> tôi làm việc vì vậy nó gọi this.props.pushToPostList(newPost) để cập nhật this.state.myList trong <App />

Router là:

var routes = (
    <Route handler={App} > 
    <DefaultRoute handler={SignUp} /> 
    <Route name="feed" path="feed" handler={LatestFeed} /> 
    <Route name="post" path="post" handler={Post} pushToPostList={this.pushToPostList} /> 
    </Route> 
); 


Router.run(routes, function (Handler) { 
    React.render(<Handler />, document.body); 
}); 

Nhiều mã:

var App = React.createClass({ 

    getInitialState: function() { 
     return { 
      myList: [] 
     }; 
    }, 

    pushToPostList: function (object) { 
     if (object) { 
      var myTempPosts = this.state.myPostList; 
      myTempPosts.push(object); 
      this.setState({myPostList: myTempPosts}); 
     } 
    }, 

    render: function() {   
     return (
      <div> 
       <RouteHandler {...this.state} /> 
      </div> 
     ); 
    } 
}); 


var Post = React.createClass({ 

    handleSubmit: function(e) { 
     e.preventDefault(); 

     var myPostTxt = this.refs.myPostTxt.getDOMNode().value.trim(); 
     this.props.pushToPostList(myPostTxt); // Send object to parent ReactJS component. 

    }, 

    render: function() { 
     return (
      <div> 
       Post. 

       <textarea 
        ref="myPostTxt" /> 

       <p /> 
       <button onClick={this.handleSubmit} type="submit">Post</button> 

      </div> 
     ); 
    } 
}); 

Trả lời

4

Move pushToPostList = {this.pushToPostList} vào Lớp ứng dụng.

var App = React.createClass({ 

getInitialState: function() { 
    return { 
     myList: [] 
    }; 
}, 

pushToPostList: function (object) { 
    if (object) { 
     var myTempPosts = this.state.myPostList; 
     myTempPosts.push(object); 
     this.setState({myPostList: myTempPosts}); 
    } 
}, 

render: function() {   
    return (
     <div> 
      <RouteHandler {...this.state} pushToPostList={this.pushToPostList} /> 
     </div> 
    ); 
} 
}); 
+0

Cảm ơn, công việc đó, chỉ là loại toàn cầu. Bất kỳ cách nào để ngăn chặn tất cả các tuyến đường của tôi có quyền truy cập vào 'this.pushToPostList', ngoại trừ chỉ 1 tuyến đường/thành phần cần nó? Tuôn ra? –

+0

Di chuyển chức năng đó từ lớp Ứng dụng sang Lớp học hoặc tạo một lớp mới ở giữa nếu bạn có nhiều hơn chỉ là Post-class cần các chức năng đó. –

+0

Nó không chỉ lên và xuống, tôi cần phải di chuyển dữ liệu theo cách giữa các tuyến đường. tức là ứng dụng của tôi giữ trạng thái nguồn cấp dữ liệu xã hội của tôi và mỗi tuyến đường sẽ có chế độ xem khác nhau trên nguồn cấp dữ liệu, tức là tuyến đường bưu điện, xem tất cả tuyến đường và xem một tuyến đường. Vì vậy, không chắc chắn làm thế nào một lớp ở giữa sẽ xem/làm việc. –

Các vấn đề liên quan