Redux Simple Router pushPath не обновляет URL
Я портировал redux-simple-router в стандартный набор изоморфного реагирования /redux ( https://github.com/erikras/react-redux-universal-hot-example). У меня есть простой обработчик события щелчка, который вызывает pushPath из redux-simple-router. Однако pushPath не обновляет мой URL. Я уже реализовал начальный порт (syncReduxAndRouter), и другие маршруты работают нормально (другие маршруты используют updatePath). Есть ли что-то еще, что мне нужно сделать, чтобы заставить это работать?
import React, {Component} from 'react';
import { pushPath } from 'redux-simple-router';
import {connect} from 'react-redux';
@connect(null,
{ pushPath })
export default class MyContainer extends Component {
constructor() {
super();
this.state = { links: [{key: 0, name: 'Link1'}, {key: 1, name: 'Link2'}, {key: 2, name: 'Link3'}] };
}
// pass in redux actions as props
handleClick(value) {
pushPath('/Links/' + value);
}
render() {
return (
<div className="container">
<div>Search bar here</div>
<div className={styles.tile_container}>
Tiles here
{this.state.links.map(source =>
<div name={link.name} key={link.key} className={styles.source_tile} onClick= {this.handleClick.bind(this, link.name)}>{link.name}</div>
)}
</div>
</div>
);
}
}
Вот версия моего кода с исправлением. Мне нужно было использовать экземпляр redux-simple-router, который был подключен к хранилищу, а затем передать его методы компоненту в качестве реквизита.
import React, {Component, PropTypes} from 'react';
import { pushPath } from 'redux-simple-router';
import {connect} from 'react-redux';
@connect(null,
{ pushPath })
export default class MyComponent extends Component {
static propTypes = {
pushPath: PropTypes.func.isRequired
};
constructor() {
super();
this.state = { links: [{key: 0, name: 'Link1'}, {key: 1, name: 'Link2'}, {key: 2, name: 'Link3'}] };
}
// pass in redux actions as props
handleClick(value) {
this.props.pushPath('/Links/' + value);
}
render() {
return (
<div className="container">
<div>Search bar here</div>
<div className={styles.tile_container}>
Tiles here
{this.state.links.map(source =>
<div name={link.name} key={link.key} className={styles.source_tile} onClick= {this.handleClick.bind(this, link.name)}>{link.name}</div>
)}
</div>
</div>
);
}
}
1 ответ
Вы называете действия создателя pushPath
вместо связанного метода.
Создатель действия просто возвращает простой объект. Чтобы вызвать связанный метод, вы должны сделать
handleClick(value) {
this.props.pushValue('/Links/' + value);
}
@connect
создать надлежащие методы для отправки и распространять его через реквизит.