2016-03-07 2 views
1

Я хочу получить доступ к текущему пути местоположения (например,/home) без ключей истории для некоторой логики сравнения.Как я могу получить доступ к текущему местоположению хэша в ответном маршрутизаторе 2?

Как я получить доступ к нему из hashHistory в реакции маршрутизатор 2.

Кроме того, как я могу получить доступ к предыдущему пути?

+0

Хотите ли вы читать URL хэш? Как насчет 'window.location.hash'? – Andreyco

+0

, когда я использую location.hash, я получаю ключи ответа вместе с хешем –

ответ

3

Вы можете получить текущий путь от опоры location вашего компонента маршрута.

Доступ к местоположению из этого.props.location вашего компонента маршрута. Если вы хотите получить его глубже в дереве, вы можете использовать любые условные обозначения, которые имеет ваше приложение для получения реквизита с максимума вниз. Один вариант заключается в обеспечении его на условиях самостоятельно:

// v2.0.x константные RouteComponent = React.createClass ({
childContextTypes: { местоположение: React.PropTypes.object},

getChildContext() { возвращение {местоположение: this.props.location}}})

Посмотрите here.

Чтобы получить текущий путь, вы можете использовать только location.pathname.

+0

, можете ли вы дать более подробную информацию о том, чего вы хотите достичь? Кроме того, вам нужно получить доступ к этому за пределами компонента маршрута? Использование 'location.pathname' является официальным способом получения доступа к пути местоположения, но обычно есть некоторые неподдерживаемые неофициальные способы, зависит от того, что вы хотите сделать :-) –

+0

Мне нужно получить доступ к маршруту, который маршрутизируется. как localhost: 9000/#/home. Я хочу «дом», чтобы сравнить его. Проблема с реакцией заключается в том, что я получаю реактивные клавиши, когда я использую location.hash, а location.pathname дает мне/все время –

+0

Это странно. Трудно найти проблему, не видя кода. Я создал [небольшой пример] (http://codepen.io/alexchiri/pen/bpVXbd) на codepen. 'MainLayout' сопоставляется с'/'и отображает внутри него дочерние' Home' и 'UserList'. 'UserList' сопоставляется с'/users' и отображает дочерний 'User' внутри. «Пользователь» сопоставляется с «/ users /: id» и не имеет дочерних элементов. В методе рендеринга каждого из этих компонентов я показываю «location.pathname» из своих реквизитов. Как вы можете заметить, при навигации по ребенку изменяется даже «location.pathname» его родителя-хоста. –

1

Один из способов доступа к пути через this.props.location от реагирующего компонента.

import React from 'react' 
import { render } from 'react-dom' 
import { browserHistory, Router, Route, Link } from 'react-router' 

class Child extends React.Component { 
    render() { 
    let location = this.props.location 
    return (
     <div> 
     <h1>Child Component</h1> 
     <p>{location.pathname}</p> 
     </div> 
    ) 
    } 
} 

class App extends React.Component { 
    render() { 
    return (
     <div> 
      {this.props.children} 
     </div> 
    ) 
    } 
} 

render((
    <Router history={browserHistory}> 
    <Route path="/" component={App}> 
     <Route path="child" component={Child} /> 
    </Route> 
    </Router> 
), document.getElementById('example')) 

Другой способ, если вы хотите слушать изменения в текущем местоположении через историю -

import { createHistory } from 'history' 

let history = createHistory() 

// Listen for changes to the current location. The 
// listener is called once immediately. 
let unlisten = history.listen(function (location) { 
    console.log(location.pathname) 
}) 

// When you're finished, stop the listener. 
unlisten()