如何在 React 组件渲染之前更新猴面包树叶数据
How to update Baobab leaf data before React component render?
ReactJS,Baobab,Material-UI应用程序显示一些项目,由其数字ID标识。为了显示这些内容,标题和图像 url 通过 ajax 从远程服务中检索。树分支存储该数据:
data: {
12345: {title:'ABC', image:'https://...'}, // id is 12345
12346: {...
}
在创建条目组件并首次呈现时,其扩展数据可能在树中可用,也可能不可用。如果不是,则 ajax 调用将排队以接收该数据。可能会使用相同的项目 ID 创建多个项目。
为了避免对同一 id 的额外请求,我想在第一次请求该 id 的信息时将虚拟信息{title:'loading', image:'spinner.gif'}
放入树中。因此,这些数据将用于第一render()
。连续的组件将获得该虚拟信息,并且不会启动任何额外的请求。
问题:如何以及在哪里可以放置代码来测试树是否还没有信息,并将假人放置在那里以指示其"penging"状态并使请求排队?
到目前为止尝试过:
- 组件的
constructor
– 道具尚未设置在那里; -
componentWillMount()
– 第一次渲染从树的旧状态开始,尽管设置虚拟值后tree.commit()
; - 在动态创建组件的分支函数中,光标指向其数据。收到警告:
setState(...):在现有状态转换期间(例如在
render
内)无法更新。渲染方法应该是 props 和状态的纯函数。
这可以提高一级来解决 - 一旦ID列表可用。但是,组件应该能够在自身内部处理其数据,这感觉是正确的。
请建议一种正确的方法,以便在 React 组件首次渲染之前立即从该组件中更新猴面包树数据?
在我的情况下(我使用相同的堆栈)包装分支工作正常。
import BaobabPropTypes from 'baobab-react/prop-types';
class Actions {
/**
* @param {Baobab} tree
*/
static prefetchTree = (tree) => {
tree.select(somePath).set(defaultValue);
tree.commit();
};
}
class Page extends React.Component {
static contextTypes = {
tree: BaobabPropTypes.baobab
};
componentWillMount() {
Actions.prefetchTree(this.context.tree);
}
render() {
return <Branch {...this.props}/>;
}
}
>猴面包树有一个get
事件,使用它来检测返回尚未获取的值的请求:
tree.on('get', function(e) {
if (e.data.data === undefined) {
const path = e.data.path; // requested cursor path like ['data',12345]
const id = path[1];
FETCH_DATA(id)
.then( data => tree.set(path , data) );
tree.set(path, PLACEHOLDER_DATA);
}
相关文章:
- ReacJS与猴面包树,如何在卸载组件后释放光标
- 如何在angularjs中检查Kendo树视图数据绑定事件
- Meteor:如何使用空格键创建包含两个集合数据的树列表
- OKFN气泡树中的数据输入
- 在angularJS中从树视图获取叶节点深度
- 使用jQuery,如何在元素上或元素内查找数据属性?(树遍历)
- Extjs树面板未加载json数据
- 使用Javascript在Html中将Xml数据或Json对象预览为Xml树
- 如何根据叶值显示JSON树中的特定路径
- 以数组为数据结构的d3.js树布局
- 如何在 React 组件渲染之前更新猴面包树叶数据
- 日历数据排序 json 树
- 使用JSON数据的HTML树状图
- 如何在php中从mysql数据中绘制树结构
- 用JSON数据填充jQuery树
- 如何将子级和孙子级json数据附加到树视图结构中
- 从服务传递数据的角度树映射
- 如何使用生成具有多个数据存储的树
- 如何使用本地 JSON 数据加载树面板
- 使用React JS从JSON数据创建一个树视图