我应该在 redux-react 应用程序的哪个位置包含有状态的展示组件?在组件或容器文件夹中?

Posted

技术标签:

【中文标题】我应该在 redux-react 应用程序的哪个位置包含有状态的展示组件?在组件或容器文件夹中?【英文标题】:Where in redux-react app would I include my stateful presentational component? In components or containers folder? 【发布时间】:2018-10-10 15:11:42 【问题描述】:

搜索组件:

import React from "react";
import SearchResults from "../SearchResults";
import PropTypes from "prop-types";

class Search extends React.Component 
  state = 
    value: ""
  ;

  handleChange = event => 
    let value = event.target.value;
    this.setState( value );
    this.props.performSearch(value);
  ;

  handleSubmit = event => 
    event.preventDefault();
  ;

  render() 
    return (
      <div>
        <h1>The Guardian Search App</h1>
        <form onSubmit=this.handleSubmit>
          <input
            type="text"
            value=this.state.value
            onChange=this.handleChange
          />
        </form>
        <div>
          <SearchResults articles=this.props.articles />
        </div>
      </div>
    );
  


Search.propTypes = 
  performSearch: PropTypes.func,
  articles: PropTypes.array
;

export default Search;

搜索容器:

import React from "react";
import Search from "../../components/Search";
import  API_KEY  from "../../../config";

import fetchArticles from "../../api";

class SearchContainer extends React.Component 
  state = 
    articles: []
  ;

  performSearch = event => 
    return fetchArticles(event).then(data =>
      this.setState( articles: data.response.results )
    );
  ;

  render() 
    return (
      <Search
        performSearch=this.performSearch
        articles=this.state.articles
      />
    );
  


export default SearchContainer;

我目前正在尝试了解 redux,因此将其转换为 react-redux 版本。我有一个搜索容器,我正在执行 mapStateToProps 并且很快也会编写 mapDispatchToProps。但是,如果我的 Search 组件还包含状态,那么我是否会执行另一个 Search Container 来将其状态映射到 props?

【问题讨论】:

【参考方案1】:

Search 组件中所需的状态直接链接并由您作为子级呈现的 input 元素所要求。因此,Search 组件中的value 状态应该留在组件内,不与 Redux 关联。

没有“正确”的做法,主要是偏好和设计模式。由于您在 Search 组件中有不想与 Redux 关联的状态,因此我会将 SearchContainer 组件挂接到您的 Redux 存储中,以提供文章对象数组,然后可以将其传递给基础 @ 987654327@ 组件作为道具,让该组件完全不知道 Redux 甚至存在。

【讨论】:

以上是关于我应该在 redux-react 应用程序的哪个位置包含有状态的展示组件?在组件或容器文件夹中?的主要内容,如果未能解决你的问题,请参考以下文章

在实现 MVC 时,应用程序的哪一部分应该调用 DAO 中的方法? [关闭]

Redux-React 代码原理分析

Redux-React 代码原理分析

无法使用 webpack 和 redux-react 获取 fetch-mock

如何组织 Redux Action-Creators 以在 Redux-React 中使用

redux与redux-react使用示例