我试着读过类似的问题,但没有成功。
export default class Tree extends Component<ITreeProps, ITreeState> {
public constructor(props: ITreeProps, state: ITreeState) {
super(props, state);
Tree.GetJsonStructure(props.Path).then(response => {
this.setState({
data : JSON.parse(response)
});
console.log(response);
});
}
public static GetJsonStructure(jsonPath: string): Promise<string>{
return new Promise((resolve, reject) => {
axios.get(jsonPath, { responseType: 'arraybuffer' }).then(response => {
if (response.status !== 200) {
// handle error
reject("FAIL!");
}
var buf = new Buffer(response.data);
//var buf = Buffer.concat(response.data);
var paki = pako.inflate(buf);
var decoder = new encoding.TextDecoder();
var stringo = decoder.decode(paki);
resolve(stringo);
});
});
}
public render(): React.ReactElement<ITreeProps> {
console.log("RENDERINGGGG");
console.log(this.state)
if(!this.state || !this.state.data || this.state.data.length == 0 ){
return <div></div>;
}
const data = this.state.data;
if (!data || data.length == 0)
console.log("No properties set for the application");
return (
<div className={styles.ToolboxLinkPanel}>
{
data.map(node => (
<TreeNode key={node.key} label={node.label} children={node.nodes} isOpen={true} ></TreeNode>
))
}
</div>
);
}
}
您需要在componentdidmount
而不是构造函数中调用api方法:
componentDidMount() {
Tree.GetJsonStructure(props.Path).then(response => {
this.setState({
data: JSON.parse(response)
});
console.log(response);
});
}
至于为什么它是进行api调用的地方,官方文档详细说明了(重点是添加的):
componentDidMount()在组件装入(插入到树中)后立即调用。需要DOM节点的初始化应该在这里进行。如果需要从远程endpoint加载数据,这是实例化网络请求[...]的好地方它将触发一个额外的渲染,但它将发生在浏览器更新屏幕之前…
问题内容: 在下面的示例中,我无法弄清楚为什么未触发$ destroy事件。有人可以解释为什么不触发它,以及在什么情况下会触发它吗? 这是pl客:http ://plnkr.co/edit/3Fz50aNeuculWKJ22iAX?p=preview JS HTML 问题答案: 问题是您正在上监听事件,但正在上触发该事件。 来自angular.js来源(我确定它已记录在网站上的某个地方,但我没有看
问题内容: 该功能运行什么?它只会运行吗? 问题答案: setState()将按以下顺序运行函数: 如果您的组件正在接收道具,它将使用上述功能运行该功能。
React引入了新的静态方法,它在每个呈现方法之前都会被调用,但为什么呢?在prop change之后调用它对我来说是有意义的,但是在之后调用它就没有意义了,也许我错过了什么。 我根据公司的要求创建了一个组件,在组件中日期是从道具控制的。我在组件中有以下状态。 是的,我在中创建了一个额外的变量来跟踪是否由于而被调用,但我认为这不是正确的方法。 或者是我做错了什么或者遗漏了什么,或者不应该在之后调用
问题内容: 我的代码中有一个。我已添加。但是它还是没有被触发。我已经尝试了很多时间,但是没有找到解决方案。 但是控制台中没有任何内容。请建议我我在做什么错。 问题答案: FocusListener不是JComboBox的适当监听器,另外一个监听器可以创建无限循环(尤其是可编辑的JComboBox), 的FocusListener是异步的,有时是太难捕捉事件是正确的订单特别是在案件JComponen
我需要测试一个服务类,但是当我试图模拟dao类时,它没有被触发,因此不能使用ThenReturn()。 我认为问题是因为我在服务类(Spring MVC 3.1)中为我的Dao和@Autowired使用了一个接口: 接口: 执行情况: 成功了!
这个问题在这里总结得很好;基本上,如果您在useEffect中有一个异步函数(这是您期望的函数),您将导致每个更新状态的组件的重新呈现。我通常不想像作者的解决方案/变通方法那样把事情堆在一起,对我来说,这种行为没有意义(您希望所有的状态更新都一起发生)。