React-Router 4.0.0+ Answer
В 4.0 и выше используйте историю в качестве опоры вашего компонента.
class Example extends React.Component { // use `this.props.history.push('/some/path')` here };
React-Router 3.0.0+ Answer
В версии 3.0 и выше используйте маршрутизатор в качестве опоры вашего компонента.
class Example extends React.Component { // use `this.props.router.push('/some/path')` here };
React-Router 2.4.0+ Ответ
В 2.4 и выше используйте компонент более высокого порядка, чтобы получить маршрутизатор в качестве опоры вашего компонента.
import { withRouter } from 'react-router'; class Example extends React.Component { // use `this.props.router.push('/some/path')` here }; // Export the decorated class var DecoratedExample = withRouter(Example); // PropTypes Example.propTypes = { router: React.PropTypes.shape({ push: React.PropTypes.func.isRequired }).isRequired };
React-Router 2.0.0+ Answer
Эта версия обратно совместима с 1.x, поэтому нет необходимости в руководстве по обновлению.
При этом, если вы хотите переключиться на новый шаблон, внутри маршрутизатора есть браузерный модуль, к которому вы можете получить доступ с помощью
import { browserHistory } from 'react-router'
Теперь у вас есть доступ к истории вашего браузера, поэтому вы можете делать такие вещи, как push, replace и т. д. Например:
browserHistory.push('/some/path')
Дальнейшее чтение: Истории и Навигация
React-Router 1.xx Ответ
Я не буду вдаваться в подробности. Вы можете прочитать об этом в Руководстве по обновлению
. Основное изменение в вопросе здесь - это переход от навигационного микширования к истории. Теперь он использует историю браузераAPI для изменения маршрута, поэтому мы будем использовать
pushState()
с этого момента.Вот пример использования Mixin:
var Example = React.createClass({ mixins: [ History ], navigateToHelpPage () { this.history.pushState(null, `/help`); } })
Обратите внимание, что этот
History
приходит из rackt / history проект. Не из React-Router.Если вы не хотите использовать Mixin по какой-либо причине (возможно, из-за класса ES6), вы можете получить доступ к истории, которую вы получаете от маршрутизатора, с
this.props.history
, Он будет доступен только для компонентов, предоставляемых вашим маршрутизатором. Итак, если вы хотите использовать его в любых дочерних компонентах, его нужно передать в качестве атрибута черезprops
.Подробнее о новой версии вы можете прочитать в своей документации по 1.0.x
Вот справочная страница, в частности, о навигации вне вашего компонента
Он рекомендует захватить ссылку
history = createHistory()
и вызватьreplaceState
на это.React-Router 0.13.x Ответ
Я попал в ту же проблему и мог найти решение с помощью навигационного микшина, который приходит с реакцией [30]
import React from 'react'; import {Navigation} from 'react-router'; let Authentication = React.createClass({ mixins: [Navigation], handleClick(e) { e.preventDefault(); this.transitionTo('/'); }, render(){ return (
Click me!); } });Мне удалось вызвать
transitionTo()
без необходимости доступа к.context
. Или вы может попробовать фантастический ES6
class
import React from 'react'; export default class Authentication extends React.Component { constructor(props) { super(props); this.handleClick = this.handleClick.bind(this); } handleClick(e) { e.preventDefault(); this.context.router.transitionTo('/'); } render(){ return (
Click me!); } } Authentication.contextTypes = { router: React.PropTypes.func.isRequired };React-Router-Redux
Примечание: если вы используете Redux, есть еще один проект под названием React-Router-Redux , который дает вам привязки редукции для ReactRouter, используя тот же подход, что React-Redux делает
React -Router-Redux имеет несколько доступных методов, которые позволяют просто перемещаться из создателей действий. Они могут быть особенно полезны для людей, имеющих существующую архитектуру в React Native, и они хотят использовать те же шаблоны в React Web с минимальными служебными надбавками.
Исследуйте следующие методы:
push(location)
replace(location)
go(number)
goBack()
goForward()
Ниже приведен пример использования с помощью Redux-Thunk :
./ actioncreators.js
import { goBack } from 'react-router-redux' export const onBackPress = () => (dispatch) => dispatch(goBack())
./ viewcomponent .js
Вы не выполняете одно и то же в случаях с пандами и дасками: для последнего у вас есть axis=1
, так что вы заканчиваете тем, что заменяете любое значение, которое встречается менее двух раз в данной строке , что это все из них.
Если вы перейдете на axis=0
, вы увидите, что получили исключение. Это связано с тем, что для вычисления, скажем, первого раздела вам потребуется, чтобы весь массив данных также передавался в лямбда-функцию - иначе как вы могли бы получить value_counts?
Решением вашей проблемы было бы получить значение считается отдельно. Вы можете явно вычислить это (результат небольшой) или передать его в лямбду. Кроме того, обратите внимание, что этот путь означает, что вы можете избежать использования apply
в пользу map
и сделать вещи более явными. Здесь я выбираю только один столбец, вы можете зациклить.
vc = ddf.A.value_counts().compute()
vc /= vc.sum() # because dask's value_count doesn't normalise
def simple_map(df):
df['A'] = df['A'].map(lambda x: x if vc[x] > 0.5 else 'other')
return df
ddf.map_partitions(simple_map, meta=df[:0]).compute()