这里的例子是——https://facebook.github.io/react/tips/initial-ajax.html -修改如下。
this.state.username
是加载时的“占位符”,并传递给
AJAX加载
后this.state.username
更改为octocat,但是...
为什么这不是传递到
var UserGist = React.createClass({
getInitialState: function() {
return {
username: this.props.username
};
},
render: function() {
return (
<div>
{this.state.username}
</div>
);
}
});
var App = React.createClass({
getInitialState: function() {
return {
username: 'placeholder'
};
},
componentDidMount: function() {
this.serverRequest = $.get(this.props.source, function (result) {
var lastGist = result[0];
this.setState({
username: lastGist.owner.login
});
}.bind(this));
},
componentWillUnmount: function() {
this.serverRequest.abort();
},
render: function() {
return (
<div>
<UserGist username={this.state.username} />
</div>
);
}
});
ReactDOM.render(
<App source="https://api.github.com/users/octocat/gists" />,
document.getElementById('main')
);
您应该通过UserGist
组件中的道具访问该值,因为它将作为prop
传递:
var UserGist = React.createClass({
render: function() {
return (
<div>
{this.props.username}
</div>
);
}
});
然后可以将其表示为无状态功能组件(如果您使用React
function UserGist(props) {
return <div>{props.username}</div>
}
没有必要将其转换为状态,除非您要在组件本身中对其进行某种突变。最好尽量使用道具,尽量减少状态。
进一步阅读:
state
vsprops
:React中state和props的区别是什么?您正在将新用户名传递给子组件,但没有更新子组件状态。
如果您想在组件接收到新道具时更新子状态,那么应该实现它。
UserGist组件。
componentWillReceiveProps: function(nextProps){
this.setState({username: nextProps.username});
}
问题内容: 我在使用jQuery时遇到Rails和ajax的一个非常奇怪的问题(尽管我不认为它特定于jQuery)。 我的Rails应用程序使用cookie会话存储,并且我有一个非常简单的登录名,用于设置会话中的用户ID。如果未在会话中设置user_id,它将重定向到登录页面。这没有问题。jQuery GET请求也可以正常工作。问题是当我执行jQuery POST时- 浏览器将会话Cookie正常
问题内容: 我浏览了旧的问题,并尝试了许多似乎可以做到的不同方法。我最接近的工作是在这里:如何在自定义WP_QueryAjax上实现分页 我已经尝试了一切,但没有用。页面上没有任何变化。如果您检查并单击“加载更多按钮”,则jQuery会执行“加载更多按钮”操作,因为它从更改为,即使对我来说,这似乎也不对。它并没有添加帖子,我想我缺少一些简单的东西,但是我一生都无法解决。 我的模板文件中的代码是:
问题内容: 我熟悉以普通方式在jQuery中使用ajax。 我已经玩了一段时间了,但是不了解Wordpress使其正常工作需要 什么… 我在这里所摘录的内容来自一些教程或文章。 这在 functions.php中 (在子主题中): jQuery本身正在加载并正常工作。 我已经尝试过一些基本的ajax,如下所示: 除此之外,我不知道如何测试以确保它是否从一开始就正确地加载了…… 在这里的任何帮助,将
问题内容: 我有一个链接,该链接应将AJAX加载的内容插入HTML页面的(appendContainer)。问题是我绑定到jQuery 的事件没有在插入到appendedContainer中的新加载的内容上执行。该事件绑定到未随我的AJAX函数加载的DOM元素上。 我必须更改什么才能绑定事件? 我的HTML: 我的JavaScript: 要加载的内容: 问题答案: 将事件委托用于动态创建的元素:
问题内容: 什么是对React组件prop更新进行单元测试的正确方法。 这是我的测试装置; 这可以正常工作,并且测试通过了,但是显示了反应警告消息 我要测试的只是属性的更新,而不是使用其他属性创建元素的新实例。有没有更好的方法来执行此属性更新? 问题答案: AirBnB的酶库为这个问题提供了一个优雅的解决方案。 它提供了一个setProps方法,可以在浅包装或jsdom包装上调用该方法。
问题内容: 我需要更改要加载的元素的位置。我想使用它来更改它,但jQuery找不到导致其无法识别的元素。如何使jQuery“识别”元素? 我已经读过,但是我不能让他们两个都按我的意愿工作。我真的很感谢您的帮助! 问题答案: 在ajax调用的或函数中更改css 。假设您正在使用: 另外(更容易举个例子)注册一个事件 每次ajax请求完成时都会触发此操作,请检查#elementID是否存在以及是否存在