2016-07-20 24 views
5

Hy vọng rằng đây là một câu hỏi rất đơn giản:Phản ứng-Redux URL cơ sở get trang web/window.location

Tôi muốn tạo ra một chuỗi chứa URL đầy đủ đến một trang trên trang web của tôi, như:

https://example.com/documents/1

Lý tưởng nhất là tôi muốn tạo điều này trong hộp chứa phản ứng-redux connect(), trong mapStateToProps(). Trường hợp trang là một cháu của một bộ phản ứng-router Route bằng cách sử dụng trình duyệtHistory (vì vậy có lẽ tôi có thể nhận được nó từ phản ứng-router hoặc browserHistory bằng cách nào đó?) Nếu cần thiết tôi muốn làm điều đó trong một lớp React đầy đủ.

Nhưng tôi không thể cho cuộc sống của tôi tìm hiểu làm thế nào để làm điều này. window (như trong window.location) luôn là undefined trong mapStateToProps() (không có bất ngờ lớn ở đó) và trong các thành phần chế độ xem của tôi 'render() chức năng.

Cho đến nay tôi chỉ tìm cách truy cập tuyến đường hiện tại, ví dụ: "/ documents/1", chỉ là đường dẫn tương đối và không chứa url cơ sở trang web (https://example.com/)

+0

Bạn có cần tạo điều này mạnh mẽ trên máy chủ hay chỉ với ứng dụng khách? –

+0

Chỉ ở phía khách hàng. – stone

Trả lời

9

Vì vậy, trước hết hãy nhớ mã của bạn chạy trên máy khách và máy chủ để mọi truy cập vào cửa sổ cần được bao bọc trong kiểm tra.

if (typeof window !== 'undefined') { 
    var path = location.protocol + '//' + location.host + '/someting'; // (or whatever) 
    } else { 
    // work out what you want to do server-side... 
    } 

Nếu URL bạn tạo hiển thị trong DOM và trên máy khách bạn lưu trữ URL này trước lần hiển thị đầu tiên, bạn sẽ gặp phải lỗi tổng kiểm tra. Nếu bạn thực sự muốn tránh lỗi, bạn có thể đợi đến componentDidMount() trong thành phần gốc của bạn để nhận/đặt url.

+0

Cảm ơn, đọc 'window.location' trong componentDidMount đã làm việc. Tôi làm điều đó từ thành phần cấp cao nhất trong ứng dụng và lưu nó trong tiểu bang. Tôi có thể hỏi a) tại sao bạn đề nghị thực hiện nó phía máy chủ - điều đó có thể được thực hiện để hiển thị phía máy chủ không? và b) cách/nơi bạn sẽ đề xuất lưu trữ url từ phía máy chủ sao cho mã máy khách có thể đọc được? – stone

+0

@skypecakes bây giờ mà tôi đã nghĩ về nó, yeah không có lý do tốt để có được nó trên máy chủ, vì vậy tôi đã loại bỏ bình luận đó từ câu trả lời của tôi. –

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