我是 react-redux 的新手,目前正在从事一个项目,我们的软件架构团队要求我们将所有组件编写为无状态功能组件(在React 0.14 中引入),并且每当我们需要向它们传递一份 redux 时声明我们应该使用容器。
我的问题是: 这种模式是否适用于每个组件以及如何适用?即使对于具有自己“状态”(不是 redux 状态)的基于类的组件?是否可以将所有类组件都重写为无状态功能组件加一个容器?
我问的原因实际上更具体:团队决定使用reactstrap-tabs在我们的组件中实现选项卡功能。选项卡将位于父组件内,并且在每个选项卡内将显示不同的子组件。从文档看来,父选项卡组件应该实现为基于类的组件(处理 this.state)。是否可以将其重写为无状态功能组件和容器?
任何帮助将不胜感激,因为我坚持这一点。这是示例代码...
import React from 'react';
import { TabContent, TabPane, Nav, NavItem, NavLink, Card, Button, CardTitle, CardText, Row, Col } from 'reactstrap';
import classnames from 'classnames';
import MyFirstChildComponent from '/components/MyFirstChildComponent';
import MySecondChildContainer from '/containers/MySecondChildContainer';
export default class TabbedParent extends React.Component {
constructor(props) {
super(props);
this.toggle = this.toggle.bind(this);
this.state = {
activeTab: '1'
};
}
toggle(tab) {
if (this.state.activeTab !== tab) {
this.setState({
activeTab: tab …Run Code Online (Sandbox Code Playgroud) 我需要访问容器内 redux 状态的特定属性。这些属性将依次用作获取其他嵌套属性并将它们映射到组件 props 的键。我使用 immutableJS。
在 mapStateToProps 中执行此操作的最佳方法是什么?这会导致任何性能开销还是因为 mapStateToProps 已经将整个状态作为参数接收了所以没问题?
这是一个例子。
状态选择器:
export const userSettingsState = state => state.get('userSettings');
export const transactionsState= state => state.get('transactions');
Run Code Online (Sandbox Code Playgroud)
userSettings 是一个不可变的 Map,而 transactions 也是 userID 和交易列表对的 Map。
const mapStateToProps = (state) => {
const curUID = userSettingsState(state).get('currentUserID');
return {
trList: transactionsState(state).getIn([curUID, 'trList'])
};
};
Run Code Online (Sandbox Code Playgroud)
我需要 currentUID 来访问用户事务。上面的示例工作正常。但这是最好的方法吗?