如何重构这个 Redux 连接代码?
How to refactor this Redux connect code?
我想在无状态组件(纯函数)中使用 Redux connect 和 asyncConnect,因此我需要将这些 class 装饰器重构为常规函数调用。
但是,我在任何地方都找不到带有 connect 的 asyncConnect 示例。
这是我的:
@asyncConnect([{
deferred: true,
promise: ({ params, store: { dispatch, getState } }) => {
if (!isLoaded(getState())) {
return dispatch(loadUser(params.userID))
}
},
}])
@connect(
state => ({ // eslint-disable-line
user: state.publicData.user.data,
error: state.publicData.user.error,
loading: state.publicData.user.loading,
}),
{ initializeWithKey })
export default class UserProfile extends Component {
...stuff
}
这是我需要的:
asyncConnect(
someStuff,
connect(moreStuff)
)(props => <div />)
我就是不知道怎么写。
你可以使用 Dan 在 redux 中提供的 compose
功能。
import { compose } from 'redux';
import { connect } from 'react-redux';
...
export default compose(
asyncConnect(...),
connect(...)
)(props => <div />);
compose
从右到左应用。
Official documentation on compose
.
有趣的是,这本质上是使用您在 类 中使用的装饰器语法的替代方法。您可以对 类.
使用相同的方法
还有一点 advice/tip。
React 严重依赖函数式概念。通过让自己适应其中的一些,它极大地帮助了我。我高度推荐以下免费在线书籍。你不需要一直深入到 Monads 的世界,我想说至少前 6 章会让你向前迈进一大步。
我想在无状态组件(纯函数)中使用 Redux connect 和 asyncConnect,因此我需要将这些 class 装饰器重构为常规函数调用。
但是,我在任何地方都找不到带有 connect 的 asyncConnect 示例。
这是我的:
@asyncConnect([{
deferred: true,
promise: ({ params, store: { dispatch, getState } }) => {
if (!isLoaded(getState())) {
return dispatch(loadUser(params.userID))
}
},
}])
@connect(
state => ({ // eslint-disable-line
user: state.publicData.user.data,
error: state.publicData.user.error,
loading: state.publicData.user.loading,
}),
{ initializeWithKey })
export default class UserProfile extends Component {
...stuff
}
这是我需要的:
asyncConnect(
someStuff,
connect(moreStuff)
)(props => <div />)
我就是不知道怎么写。
你可以使用 Dan 在 redux 中提供的 compose
功能。
import { compose } from 'redux';
import { connect } from 'react-redux';
...
export default compose(
asyncConnect(...),
connect(...)
)(props => <div />);
compose
从右到左应用。
Official documentation on compose
.
有趣的是,这本质上是使用您在 类 中使用的装饰器语法的替代方法。您可以对 类.
使用相同的方法还有一点 advice/tip。
React 严重依赖函数式概念。通过让自己适应其中的一些,它极大地帮助了我。我高度推荐以下免费在线书籍。你不需要一直深入到 Monads 的世界,我想说至少前 6 章会让你向前迈进一大步。