<link />使用React + Redux(不是欺骗)

时间:2018-05-09 01:30:39

标签: javascript reactjs redux react-router react-router-v4

伙计们,首先,它看起来像是重复的,但我发誓,我搜遍了整个地方,所有可能的解决方案对我都没有用。

问题是经典&#34;当我点击某个元素时,网址会发生变化但该组件没有更新&#34;

事实上,它只会在第一次点击时更新。

以下是我的相关代码:

index.js

...
render(
  <Provider store={store}>
    <ConnectedRouter history={history}>
      <div>
        <App />
      </div>
    </ConnectedRouter>
  </Provider>,
  target
);

应用程序组件

...
const App = () => (
    <BrowserRouter>
        <div>
            <Switch>
                <Route exact path="/" component={Home} />
                <Route path="/items/:id" component={Product} />
                <Route path="/items" component={Search} />
            </Switch>
        </div>
    </BrowserRouter>
);

export default App;

搜索组件

...
const Search = props => (
    <div>
        <header>
            <SearchBar />
        </header>
        <main>
            <SearchResult />
        </main>
    </div>
);

export default Search;

SearchResult组件

const renderItem = result => (
  <div key={result.id} className="result-item">
    <Link to={`/items/${result.id}`}>
        ...
    </Link>
  </div>
);

class SearchResult extends Component {
  componentWillMount() {
    if (!this.props.resultIsLoading && !this.props.results.items) {
      const { search: term } = queryString.parse(this.props.location.search);
      this.props.search(term);
    }
  }

  render() {
    if (!this.props.results.items) return <div>...</div>;

    return (
      <div className="container">
        <div className="product-list">
          {this.props.results.items.map(renderItem)}
        </div>
      </div>
    );
  }
}

const mapStateToProps = ({ results, resultIsLoading }) =>
  ({ results, resultIsLoading });

const mapDispatchToProps = dispatch =>
  bindActionCreators({ search }, dispatch);

export default withRouter(connect(mapStateToProps, mapDispatchToProps)(SearchResult));

单击时,状态不会更改,不会调用reducer,ProductDetails组件也不会更新。

我尝试了很多可能的解决方案。连接上的{pure:false},作为prop传递位置,删除主BrowserRouter,删除withRouter,似乎没有工作。

有人可以告诉我这个吗?

0 个答案:

没有答案