【问题标题】:How to use PureRenderMixin (React js) in Meteor如何在 Meteor 中使用 PureRenderMixin (React js)
【发布时间】:2016-05-09 00:21:30
【问题描述】:

我正在使用 Meteor 1.2 和 react 构建一个应用程序,并使用 react-meteor-data mixin 从我的发布方法中获取数据。 我认为一个好主意是拥有一个包含所有状态和数据订阅的“AppWrapper”组件,它通过道具传递给“App”组件,后者会将所有组件呈现到层次结构中...... 尽管这是可行的,但我希望所有渲染组件都是纯的并且具有不可变的数据。 下一步该怎么走?

1)react包里已经有插件但是不知道怎么用?

2) 我应该从 npm 安装它并等待 Meteor 1.3 包系统?

3) 是否可以使用一些不可变库来实现自定义 shouldComponentUpdate?

我将不胜感激有关此主题的任何想法或经验,谢谢

【问题讨论】:

    标签: javascript meteor reactjs npm mixins


    【解决方案1】:

    1) 转到第 3 点

    2) 转到第 3 点

    3) 当然!例如:Immutable.js

    const AppWrapper = React.createClass({
        mixins: [ReactMeteor.Mixin],
    
        getMeteorState () {
            return {
                data: Immutable.Map({
                    userId: Meteor.userId()
                })
            };
        },
    
        shouldComponentUpdate (nextProps, nextState) {
            return !this.state.data.equals(nextState.data);
        },
    
        render () {
            return (
                <App data={this.state.data} />
            );
        }
    });
    
    // This is basic example with pure component.
    // Of course this might be another component created with 
    // React.createClass implementing it's own shouldComponentUpdate method.
    const App = ({ data }) => (
        <p>Your userId: {data.get('userId')}</p>
    );
    

    【讨论】:

    • 谢谢,我会尝试这种方式,只有 3 个问题:1) 我可以删除 react-meteor-data 包,因为我认为它不再需要吗? 2)我可以只在 AppWrapper 组件中实现 shouldComponentUpdate ,并且确信所有子组件只会在需要时更新吗? 3) 我知道我问过这种情况是否可行,但我也认为这是一种很好的做法,对吧?
    • 1) 这个包只是一个 helper 来集成 React 和 Meteor。您仍然可以使用它,找到自己的方式来获取数据或使用不同的包(例如github.com/vazco/meteor-universe-utilities-react)。
    • 2) shouldComponentUpdate 只检查实现它的组件。如果您的 AppWrapper 应该更新,但它的子级没有 - 它也可以实现此方法,并防止不必要的渲染。
    • 3) shouldComponentUpdate 是一种优化方式(防止不必要的渲染),所以是的 - 这是一个很好的做法,但请记住:过早的优化是万恶之源
    • 1) 好的,2) 如果我只将必要的道具子集传递给孩子等等,那么最后一次离开只接收一个名为 message_id 的属性,那么如果 Wrapper 应该更新,但 message_id没有改变,那么我假设 React 和 Immutable 为我做这项工作? (不更新组件,因为属性没有改变),3)好的,我总是喜欢从性能开始考虑,但我明白了,谢谢!
    猜你喜欢
    • 2015-09-07
    • 1970-01-01
    • 2016-12-17
    • 2021-04-02
    • 2017-04-29
    • 2015-12-05
    • 2018-03-18
    • 2016-10-07
    • 2016-05-09
    相关资源
    最近更新 更多