我设计了下面的课程。
export default class DataView extends React.Component {
private message = "---";
private url = ...;
private body = { ... };
private headers = { ... };
constructor(props: any) {
super(props);
this.message = "executing...";
ajax.post(this.url, this.body, this.headers)
.subscribe(
result => {
this.message = "code " + result.status;
console.log(result.status);
},
error => {
this.message = "Problem: " + error.status;
console.log("Problem: " + error.status)
});
}
render() {
return (
<div style={divStyle}>
Message: {this.message}
</div>);
}
}
期望原始字符串将被初始消息(发生)替换,然后是调用的结果(不会发生)。我是React的新手,不确定这里有什么问题。这是我在Angular中使用的方法,但当然,在React中的工作方式有点不同。
调用本身是成功的,我可以在控制台中看到正确的结果。只有类变量和呈现值之间的绑定是过时的。我被告知渲染是自动完成的,我不应该自己调用render()。
如果您想在ajax调用后重新呈现数据,您应该使用state。检查状态和生命周期教程。您的代码应该是这样的:
export default class DataView extends React.Component {
constructor(props) {
super(props);
this.state = {message: 'executing...', body: '', headers: '', 'url': ''}
}
componentWillMount() {
ajax.post(this.state.url, this.state.body, this.state.headers)
.subscribe(
result => {
this.setState({ message: "code " + result.status });
console.log(result.status);
},
error => {
this.setState({ message: "Problem: " + error.status });
console.log("Problem: " + error.status)
});
}
render() {
return (
<div style={divStyle}>
Message: {this.state.message}
</div>);
}
}
React不是这样的。只有当您通过setState
更改状态时,它才会触发新的渲染。您的消息属性不是state,您不能通过设置state对其进行更改。
此外,从构造函数触发ajax并不是您在React中的做法。相反,您可以在组件ddMount
中执行,并且您可以考虑到ajax调用在渲染
中并不总是完整的事实。(如果这是不可接受的,那么您将ajax调用提升一个级别,并让父级仅在数据可用时渲染此组件。)
下面是一个示例,它的修改非常小,setTimeout
代表ajax;请参见***
注释:
class DataView extends React.Component {
/* These would all probably be state properties
private message = "---";
private url = ...;
private body = { ... };
private headers = { ... };
*/
constructor(props) {
super(props);
this.state = { // *** Put `message`
message: "executing..." // *** on `state`
};
}
componentDidMount() { // *** Use `componentDidMount`
/* // *** to start async load
ajax.post(this.url, this.body, this.headers)
.subscribe(
result => {
this.message = "code " + result.status;
console.log(result.status);
},
error => {
this.message = "Problem: " + error.status;
console.log("Problem: " + error.status)
});
*/
setTimeout(() => {
this.setState({ // *** Update state with
message: "code GOTSTATE" // *** `setState`
});
}, 800);
}
render() {
return (
// *** No idea where `divStyle` was meant to come from, left it out below
// Note using `this.state.message` below
<div>
Message: {this.state.message}
</div>);
}
}
ReactDOM.render(
<DataView />,
document.getElementById("root")
);
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
问题内容: 我已经编写了angularjs指令。在该指令的模板中,我添加了一个ngIf指令,并在其中显示绑定到指令范围的输入。 经过大量的反复试验,我注意到ngIf指令导致更改输入文本时模型无法更新。如果我将其更改为ngShow,则一切正常。 我正在寻找这种差异的解释 我在这里创建了一个jsfiddle 问题答案: 之所以会这样,是因为ngIf创建了一个新的子作用域,因此,如果您想绑定到与其他输入
谁能帮我解决这个问题,或者给我指出正确的方向? 我正在使用Python 3.9.7 我的目标是创建一个python程序,使用Tkinter显示两个变量之间的时间差,我希望这个变量在倒计时时每秒更新一次。 我已经创建了TK窗口,其中显示了标题文本和timedif标签,但是当我的程序运行时,timedif标签不会更新。Timedif标签仅显示程序执行时的timedelta。 我定义了一个函数count
问题内容: 这是我的HTML: 当我在框中输入内容时,该模型会通过2向绑定机制进行更新。甜。 但是, 当我通过JQuery执行此操作时… 它不会更新模型。为什么? 问题答案: Angular不知道这种变化。为此,您应该在以下位置致电或进行更改: 看到这个以更好地了解 脏检查 更新 :这是一个示例
我想要一个udf函数,它遍历列“Values”,并检查下一个值是否是当前行值的50%或更多。如果它在50%之内,那么我希望包含值“是”,如果不是,那么我不希望包含值。如果该值在最后一个值和下一个值之间下降得太快,则不应将其包括在内,但如果该值逐渐下降,且与最后一个包括的值相比不超过50%,则可以。这就是为什么。未包括id 5的1,但。包含id 9的1,因为它遵循的值从逐渐下降。4不超过50%。我曾
问题内容: 我尝试编写一个小指令,以将其内容包装在另一个模板文件中。 这段代码: 应该有以下输出: 因为布局“默认”具有以下代码: 这里的指令代码: }); 我的问题: 例如,当我在模板(在布局模板中或在布局标签内部)中使用范围变量时。它只是最初工作。如果我更新变量,则该指令不再更新。整个链接功能只会被触发一次。 我认为,AngularJS不知道,该指令使用范围变量,因此不会被更新。但是我不知道如
问题内容: 这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。 7年前关闭。 我得到一个页面网址,例如。现在,有人告诉我将b的值更改为5,以使其变为。 即从更改为 注意:此处的变量b可以引用任何名称。 问题答案: 采用 从URL中提取查询字符串 将查询字符串拆分为一