相关疑难解决方法(0)

在leaf-like组件中connect()是react + redux中反模式的标志吗?

目前正致力于react + redux项目.

我还使用normalizr来处理数据结构并重新选择以收集应用程序组件的正确数据.

一切似乎都运作良好.

我发现自己处于类似叶子的组件需要来自商店的数据的情况,因此我需要connect()组件来实现它.

作为一个简化示例,假设该应用程序是一个图书编辑系统,有多个用户收集反馈.

Book
    Chapters
        Chapter
            Comments
        Comments
    Comments
Run Code Online (Sandbox Code Playgroud)

在应用程序的不同级别,用户可以贡献内容和/或提供评论.

考虑我正在渲染章节,它有内容(和作者)和评论(每个都有自己的内容和作者).

目前我会connect()reselect章节内容基于ID.

因为数据库是用normalizr规范化的,所以我实际上只获得章节的基本内容字段和作者的用户ID.

为了呈现注释,我将使用一个可以重新选择链接到章节的注释的连接组件,然后单独呈现每个注释组件.

同样,因为数据库是用normalizr规范化的,所以我真的只得到评论作者的基本内容和用户ID.

现在,为了呈现像作者徽章一样简单的东西,我需要使用另一个连接的组件从我拥有的用户ID中获取用户详细信息(在呈现章节作者和每个评论作者时).

该组件将是这样简单的东西:

@connect(
    createSelector(
        (state) => state.entities.get('users'),
        (state,props) => props.id,
        (users,id) => ( { user:users.get(id)})
    )
)
class User extends Component {

    render() {
        const { user } = this.props

        if (!user)
            return null
        return <div className='user'>
                    <Avatar name={`${user.first_name} ${user.last_name}`} size={24} round={true}  />
                </div>

    }
}

User.propTypes = {
    id : …
Run Code Online (Sandbox Code Playgroud)

javascript immutable.js redux normalizr react-redux

4
推荐指数
1
解决办法
678
查看次数

标签 统计

immutable.js ×1

javascript ×1

normalizr ×1

react-redux ×1

redux ×1