从外部更新组件属性
Update component properties externally
我想把我的头绕在React
上。我的要求是有两个组件,它们都以两种不同的方式显示相同的JSON数据。我想调用一个Web API 2
方法,它将返回一个JSON结果,然后在保存数据的变量发生变化时重新呈现组件。由于这两个组件需要反映相同的数据,所以我不想两次调用$.ajax
。我做了一个小的测试组件来模拟这个过程的一部分,但我不能弄清楚。
我有以下jsx
代码:
var Data = {text: "Some Text..."};
var TestComponent = React.createClass({
render: function() {
return (
<div className="testComponent">
Hello, world! I am a TestComponent. {this.props.data.text}
</div>
);
},
updateData: function() {
this.setProps({data: Data});
}
});
React.renderComponent(
<TestComponent data={Data} />,
document.getElementById('content')
);
setInterval(function() {
Data = {text: "Some other text..."};
}, 1000);
在setInterval
方法中,我试过直接使用TestComponent.setProps({data: Data});
,也试过用两者调用TestComponent.updateData();
,我得到undefined
错误。我也试过React.TestComponent.
,这也是undefined
。
我认为这是一个简单的用例,但我找不到这样的例子。我看到很多关于这样做的讨论,但没有代码示例。也许我做错了?
你试图调用TestComponent
类的方法;相反,您应该使用React.renderComponent
返回的实例。像这样可以工作:
var component = React.renderComponent(
<TestComponent data={Data} />,
document.getElementById('content')
);
setInterval(function() {
Data = {text: "Some other text..."};
component.setProps({data: Data});
}, 1000);
虽然首选的是更具声明性的方法,即在同一节点上再次简单地调用renderComponent,如下所示:
function renderTest(data) {
React.renderComponent(
<TestComponent data={data} />,
document.getElementById('content')
);
}
renderTest({text: "Some Text..."});
setInterval(function() {
renderTest({text: "Some other text..."});
}, 1000);
希望对你有帮助。
相关文章:
- 如何更改reactjs中外部/独立组件的状态或属性
- 当组件准备就绪时,如何在Polymer中动态注册新属性
- 自定义HTML元素属性未显示-Web组件
- Ember服务在注入组件并在计算属性中使用后是未定义的
- Ember.js:未在组件'中渲染的模型的计算属性;关于变更的参考
- 通过emberJS中的控制器修改组件的属性
- 无法将react组件作为属性传递给另一个组件
- 如何创建一个组件,我可以设置在 Angular 2 中的属性中获取 URL 数据
- 组件是HTML5的属性还是原型.js的东西
- 将自定义属性添加到 vuejs 组件
- 有没有更好的方法来处理窗口属性&React/Redux中的子组件
- react使用扩散属性渲染组件列表
- 如何设置组件'的属性值
- HTML代码表单Angular2组件属性
- 是否可以将服务注入Angular 1.5组件's templateUrl属性
- 手动css模块带有属性以区分组件
- 如何使用Angular 1.5组件将属性求值为字符串,这是一个自定义函数
- Ember组件:将attr绑定到每个属性中
- Reactjs基于jsx中的属性创建条件组件
- 创建可重用D3.js/jQuery数据属性组件或模块的可能性