如何在 ReactJS 中触发模型更改的重新渲染?

Posted

技术标签:

【中文标题】如何在 ReactJS 中触发模型更改的重新渲染?【英文标题】:How to trigger re-render on model change in ReactJS? 【发布时间】:2015-06-24 10:33:57 【问题描述】:

我正在使用

创建一个反应组件
React.render(<ReactComponent data="myData">, document.body);

一旦数据模型发生变化,我会再次使用

调用 render
React.render(<ReactComponent data="myData">, document.body);

这是更新我的 html 的正确/推荐方式吗? 这是否会利用 React 虚拟 DOM 的优势(即仅渲染实际发生变化的元素)。

另外,我应该在传递 myData 时使用状态还是属性?

【问题讨论】:

【参考方案1】:

您应该只渲染一个主 App 组件,该组件执行 AJAX 请求等,并使用其渲染函数中的数据模型来更新子组件。

在创建 React 组件时,您应该始终尽量减少 state 的使用,并将其移至***组件,而不是使用 props 来渲染子组件。

这篇文章在我刚开始使用 React 时帮助了我很多:https://github.com/uberVU/react-guide/blob/master/props-vs-state.md

类似:

var App = React.createClass(
    render: function()
        return (
            <div>
                <input type="button" onClick=this.handleClick/>
                <Dropdown items=this.state.countries/>
            </div>
        )
    ,
    getInitialState: function()
        return countries: ;
    ,
    componentDidMount: function()
        var self = this;
        $.getJSON("countries", function(err, countries)
            self.setState(countries: countries);
        );
    ,
    handleClick: function()
        // every time the user does something, 
        // all you need to do is to update the state of the App 
        // which is passed as props to sub components
    
)

React.render(React.createElement(App, ), document.body);

【讨论】:

谢谢!我确实读过,我只是有点困惑。感谢您的澄清。

以上是关于如何在 ReactJS 中触发模型更改的重新渲染?的主要内容,如果未能解决你的问题,请参考以下文章

重新渲染 Reactjs 数组组件

重新渲染 Reactjs 后,父组件立即失去状态

SvelteJS vs ReactJS 渲染区别(重绘/回流)

reactjs:动作后redux不会重新渲染

Vue 组件 prop 更改不会触发重新渲染

Vuex 全局状态更改不会触发 Nuxt 中 v-for 循环中的重新渲染组件