Javascript 如何绑定到它,以便在这个咖啡脚本中正确调用React中的setState?
我在coffeescript中有一些react代码,如下所示_fetchKitesDone通过AJAX正确地检索数据,但渲染结果总是显示“加载数据…”,我怀疑这意味着setState没有正确启动,我认为这与我没有绑定到react组件的“this”范围有关 如何在下面的代码中执行此操作?或者,如果这不是问题,那是什么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
@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
,谢谢(我假设您正在响应我删除的注释)