Javascript 如何绑定到它,以便在这个咖啡脚本中正确调用React中的setState?

Javascript 如何绑定到它,以便在这个咖啡脚本中正确调用React中的setState?,javascript,reactjs,coffeescript,Javascript,Reactjs,Coffeescript,我在coffeescript中有一些react代码,如下所示_fetchKitesDone通过AJAX正确地检索数据,但渲染结果总是显示“加载数据…”,我怀疑这意味着setState没有正确启动,我认为这与我没有绑定到react组件的“this”范围有关 如何在下面的代码中执行此操作?或者,如果这不是问题,那是什么 @ChartContainer = React.createClass # Display name used for debugging displayName: "Cha

我在coffeescript中有一些react代码,如下所示_fetchKitesDone通过AJAX正确地检索数据,但渲染结果总是显示“加载数据…”,我怀疑这意味着setState没有正确启动,我认为这与我没有绑定到react组件的“this”范围有关

如何在下面的代码中执行此操作?或者,如果这不是问题,那是什么

@ChartContainer = React.createClass
  # Display name used for debugging
  displayName: "ChartContainer"

  # set initial state before mounting component
  getInitialState: ->
    #some state
    fetchedData: false
    kitesData: []

  componentDidMount: ->
    # fetch the data
    @_fetchKites({})

  _fetchKites: (data) ->
    $.ajax
      url: "/kites.json"
      dataType: 'json'
      data: data
    .done @_fetchKitesDone
    .fail @_fetchDealsFail

  # If the AJAX call is successful ...
  _fetchKitesDone: (data, textStatus, jqXHR) ->
    # Change component state & cause children to render again
    labels = []
    kiteValues = []
    for key of data
      labels.push(key)
      kiteValues.push(data[key])
    stringData = {
      labels: labels,
      datasets: [
        {
          fillColor : "rgba(220,220,220,0.5)",
          strokeColor : "rgba(220,220,220,1)",
          pointColor : "rgba(220,220,220,1)",
          pointStrokeColor : "#fff",
          data : kiteValues
        }
      ]
    }
    @setState
      fetchedData: true
      kitesData: stringData

  # If errors in AJAX call ...
  _fetchDealsFail: (xhr, status, err) =>
    console.error @props.url, status, err.toString()

  render: ->
     if (@state.kitesData.length > 0)
      <div>
        in here
       </div>
     else
       <div>Loading data...</div>
@ChartContainer=React.createClass
#用于调试的显示名称
显示名称:“ChartContainer”
#在安装组件之前设置初始状态
getInitialState:->
#某个州
fetchedData:false
风筝数据:[]
组件安装:->
#获取数据
@_获取风筝({})
_获取风筝:(数据)->
$.ajax
url:“/kites.json”
数据类型:“json”
数据:数据
.好了(你拿风筝好了)
.fail@_fetchDealsFail
#如果AJAX调用成功。。。
_fetchKitesDone:(数据,文本状态,jqXHR)->
#更改组件状态并使子级再次渲染
标签=[]
KiteValue=[]
数据密钥
标签。按(键)
kiteValue.push(数据[键])
stringData={
标签:标签,
数据集:[
{
填充颜色:“rgba(220220,0.5)”,
strokeColor:“rgba(2201)”,
点颜色:“rgba(220220,1)”,
pointStrokeColor:“fff”,
数据:KiteValue
}
]
}
@设定状态
fetchedData:对
kitesData:stringData
#如果AJAX调用中出现错误。。。
_fetchDealsFail:(xhr、状态、错误)=>
console.error@props.url,状态,err.toString()
渲染:->
如果(@state.kitesData.length>0)
在这里
其他的
正在加载数据。。。

你是对的
这个
值在
$中。ajax
不是你的组件。您需要这样做:

_fetchKites: (data) ->
    $.ajax
      url: "/kites.json"
      dataType: 'json'
      data: data
    .done (data, textStatus, jqXHR) => 
       @_fetchKitesDone(data, textStatus, jqXHR)
    .fail (jqXHR, textStatus, errorThrown) => 
       @_fetchDealsFail(jqXHR, textStatus, errorThrown )

您的函数已正确绑定。让它们保持原样。问题在于
stringData
是一个对象,而不是数组。在渲染代码中,您正在检查始终返回未定义的
{}.length
,谢谢(我假设您正在响应我删除的注释)