当前位置: 首页 > 知识库问答 >
问题:

React-如何在AJAX加载上更新子级

巫马炫明
2023-03-14

这里的例子是——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')
);

共有2个答案

姬承教
2023-03-14

您应该通过UserGist组件中的道具访问该值,因为它将作为prop传递:

var UserGist = React.createClass({
  render: function() {
    return (
      <div>
        {this.props.username}
      </div>
    );
  }
});

然后可以将其表示为无状态功能组件(如果您使用React

function UserGist(props) {
  return <div>{props.username}</div>
}

没有必要将其转换为状态,除非您要在组件本身中对其进行某种突变。最好尽量使用道具,尽量减少状态。

进一步阅读:

  • statevsprops:React中state和props的区别是什么?
  • 无状态功能组件
卫深
2023-03-14

您正在将新用户名传递给子组件,但没有更新子组件状态。

如果您想在组件接收到新道具时更新子状态,那么应该实现它。

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是否存在以及是否存在