You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将jQuery $.get的response.status存入React变量this.posts?

解决React中$.get()内部无法访问this.posts的问题

你遇到的问题其实是JavaScript上下文绑定导致的——在jQuery的AJAX回调里,如果处理不当,this的指向会发生变化,不再指向你的React组件实例,所以直接访问this.posts才会返回undefined。下面给你几种靠谱的解决办法:

方法一:用箭头函数锁定上下文

箭头函数不会创建自己的this,它会继承外层作用域的this(也就是你的组件实例)。你已经在fetchPosts里用了箭头函数,只要回调也保持箭头函数的形式,就能正常访问this.posts:

fetchPosts = () => {
  var data = { rss_url: 'https://medium.com/feed/tradecraft-traction' };
  $.get('https://api.rss2json.com/v1/api.json', data, (response) => {
    // 这里的this就是组件实例,放心赋值
    this.posts = response.status;
    // 注意:直接赋值this.posts不会触发组件重新渲染,如果需要页面更新,建议用下面的state方案
  });
}

方法二:提前保存组件的this到变量

如果你习惯用普通函数作为回调,可以在回调外面先把组件的this存到一个变量(比如that)里,之后用这个变量访问组件实例:

fetchPosts = () => {
  var data = { rss_url: 'https://medium.com/feed/tradecraft-traction' };
  const that = this; // 把组件的this存下来
  $.get('https://api.rss2json.com/v1/api.json', data, function(response) {
    // 用that代替this,就能访问到组件的posts属性了
    that.posts = response.status;
  });
}

更推荐的做法:用React State管理数据

上面两种方法能解决赋值问题,但直接修改this.posts不会触发组件重新渲染,页面不会同步更新。React推荐用state来管理组件内部的可变数据,这样数据变化时页面会自动刷新:

import React, { Component } from 'react';
import $ from 'jquery';

class MediumPosts extends Component {
  constructor(props) {
    super(props);
    // 把posts放到state里初始化
    this.state = {
      posts: []
    };
  }

  fetchPosts = () => {
    var data = { rss_url: 'https://medium.com/feed/tradecraft-traction' };
    $.get('https://api.rss2json.com/v1/api.json', data, (response) => {
      if (response.status === 'ok') {
        // 用setState更新数据,触发组件重新渲染
        this.setState({ posts: response.items });
      } else {
        console.error('请求失败:', response.message);
      }
    });
  }

  // 组件挂载完成后发起请求
  componentDidMount() {
    this.fetchPosts();
  }

  render() {
    // 从state里取数据渲染页面
    return (
      <div className="medium-posts">
        {this.state.posts.map(post => (
          <article key={post.guid} className="post-item">
            <h2>{post.title}</h2>
            <p dangerouslySetInnerHTML={{ __html: post.description }} />
          </article>
        ))}
      </div>
    );
  }
}

export default MediumPosts;

这样一来,当接口返回数据后,setState会更新组件状态,页面自动重新渲染展示最新的内容。

内容的提问来源于stack exchange,提问作者Giovanni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:16:14