React-router-dom和Redux没有重新呈现组件

时间:2018-05-18 12:17:22

标签: javascript reactjs redux react-router-dom

编辑:我找到了解决方案,我忘记了switch

中的routes.js组件

我创建了一条这样的路线:/post/:id

我的routes.js看起来像:

import React, { Component } from "react";
import { BrowserRouter, Route } from "react-router-dom";
import Posts from "./components/Posts";
import Post from "./components/Post";
class Routes extends Component {
  render() {
    return (
      <div>
        <BrowserRouter>
          <div>
            <Route exact path="/" component={Posts} />
            <Route path="/post/:id" component={Post} />
          </div>
        </BrowserRouter>
      </div>
    );
  }
}

export default Routes;

在我的/路线中,我列出了我的所有posts,当我点击其中一个时,我会更新网址http://localhost:3000/post/1

PS:我尝试使用withRouter函数,就像在react-router的官方文档中所说的那样,但这种情况在我的情况下不起作用。

有问题的文件是post.js,如下所示:

import React, { Component } from "react";
import { active_post } from "../actions/index";
import { bindActionCreators } from "redux";
import { connect } from "react-redux";
import { Link } from "react-router-dom";

class Post extends Component {
  componentWillMount() {
    this.props.active_post(this.props.match.params.id);
  }
  render() {
    console.log(this.props.post);
    return (
      <div>
        <h1>Detail d'un post</h1>
        <p>{this.props.match.params.id}</p>
      </div>
    );
  }
}

function mapStateToProps(state) {
  return {
    post: state.activePost
  };
}
function mapDispatchToProps(dispatch) {
  return bindActionCreators({ active_post }, dispatch);
}

export default connect(mapStateToProps, mapDispatchToProps)(Post);

例如,如果我在网址栏http://localhost:3000/post/3中手动输入,例如我有组件,console.log()在我需要时添加帖子。

所以,如果你有这个案例的解决方案,我就拿这个。 谢谢你:)

1 个答案:

答案 0 :(得分:0)

您应该尝试在您的路线周围添加来自react-router-dom的function MakeString() { foreach(/*for each here*/) { $string = $name. "\tab" . $gpu . "\tab" . $cpu . "{\pard\par}"; $string .= $name. "\tab" . $gpu . "\tab" . $cpu . "{\pard\par}"; $string .= $name. "\tab" . $gpu . "\tab" . $cpu . "{\pard\par}"; } return $string; } $vars = array ( 'name' => $info['name'], 'address' => $info['address'], 'phone' => $info['phone'], 'string-here' => MakeString(), ); $new_rtf = populate_RTF($vars, $template); $fr = fopen($saveLocation.$filename, 'w') ; fwrite($fr, $new_rtf); fclose($fr);

Switch

不要忘记在组件中包含react-router-dom的Switch模块。

<BrowserRouter> <div> <Switch> <Route exact path="/" component={Posts} /> <Route path="/post/:id" component={Post} /> </Switch> </div> </BrowserRouter>