Javascript 如何获取新数据以响应路由器更改与Redux?

Javascript 如何获取新数据以响应路由器更改与Redux?,javascript,reactjs,react-router,redux,Javascript,Reactjs,React Router,Redux,我正在使用Redux、Redux路由器和reactjs 我正在尝试制作一个应用程序,从中获取路线更改的信息,因此,我有如下内容: <Route path="/" component={App}> <Route path="artist" component={ArtistApp} /> <Route path="artist/:artistId" component={ArtistApp} /> </Route> 谢谢 1)针对路

我正在使用Redux、Redux路由器和reactjs

我正在尝试制作一个应用程序,从中获取路线更改的信息,因此,我有如下内容:

<Route path="/" component={App}>
    <Route path="artist" component={ArtistApp} />
    <Route path="artist/:artistId" component={ArtistApp} />
</Route>
谢谢

1)针对路由更改调度乐观请求操作,即
BrowserHistory.listen(位置=>dispatch(RouteLocationIDUpdate(位置))

2) 异步操作:

现在,我的问题是,这真的是必要的还是仅仅是保持体系结构反应不可知的一种方法?我可以从react componentDidMount()和componentDidUpdate()获取所需的信息吗

您完全可以在
componentDidMount()
componentWillReceiveProps(nextrops)

这就是我们在Redux中所做的:

function loadData(props) {
  const { fullName } = props;
  props.loadRepo(fullName, ['description']);
  props.loadStargazers(fullName);
}

class RepoPage extends Component {
  constructor(props) {
    super(props);
    this.renderUser = this.renderUser.bind(this);
    this.handleLoadMoreClick = this.handleLoadMoreClick.bind(this);
  }

  componentWillMount() {
    loadData(this.props);
  }

  componentWillReceiveProps(nextProps) {
    if (nextProps.fullName !== this.props.fullName) {
      loadData(nextProps);
    }

  /* ... */

}

你可以通过Rx变得更加复杂,但这根本不是必需的。

我已经通过普通路由器ONNET/onLeave回调道具上的自定义绑定做到了这一点,如下所示:

const store = configureStore()

//then in router
<Route path='/myRoutePath' component={MyRouteHandler} onEnter={()=>store.dispatch(myRouteEnterAction())} />
const store=configureStore()
//然后在路由器中
store.dispatch(MyRouteInteraction())}/>

它有点粗糙,但很有效,我现在还不知道更好的解决方案。

你试过在Reactiflux slack room上提问吗?他们有一个非常活跃的Redux频道,我没有!现在就可以了,谢谢大家@请写下slack的人说的话,这真的很有帮助。10xYep,你应该在这里发布答案:)在React Router中使用OneNet/onLeave道具是“惯用的Redux”吗?@VictorSuzdalev当然,Redux在这里没有意见。天哪,同样的Dan回答,谢谢老兄!我喜欢你的工作。(对不起,我是一个技术爱好者)我被困住了,因为componentWillMount和componentWillReceiveProps现在被弃用了,谢谢你的解决方案!它是有效的,虽然我更喜欢Dan的方法,将东西保持在同一个组件中,但我认为它更干净。@Francoriso作为一个品味问题,这里不需要争论。)这是一个很好的选择(我大多数时候更喜欢)。如果您希望您的组件愚蠢到不知道如何获取数据,这就是您要做的。我喜欢组件只渲染和“反应”道具的变化。相反,如果组件的状态涉及对应用程序其余部分不透明的API调用(例如:您在npm上发布的github星型计数器),那么使用componentWillMount()=>loadData更有意义。干杯react-router-4上不再存在OneNet
const store = configureStore()

//then in router
<Route path='/myRoutePath' component={MyRouteHandler} onEnter={()=>store.dispatch(myRouteEnterAction())} />