我是新来的反应redux。我正在尝试使用foursquare api构建一个简单的餐厅应用程序。我有两个动作让api调用1st。搜索餐厅和第二个以获取此类详细信息。
Action.js
python.exe
这是我的组件
export const fetchVenueDetail = venueId => dispatch => {
console.log("dispatching");
dispatch({ type: FETCH_VENUE_REQUESTED });
fetch(
`https://api.foursquare.com/v2/venues/${venueId}?
client_id=${api_id}&client_secret=${api_key}&v=20180422`
)
.then(res => res.json())
.then(data => dispatch({ type: FETCH_VENUE, payload:
data.response.venue }))
.catch(err => console.log(err));
};
经过测试,我发现它没有调度动作,这就是我收到空响应的原因。
以下是工作沙箱代码如果有人想检查 - https://codesandbox.io/s/7m4153p1jq
答案 0 :(得分:0)
Ok所以问题是我在componentDidMount生命周期内调度我的动作但是当我将它更改回componentWillMount时。有用。有人能解释一下原因吗?
答案 1 :(得分:0)
实际问题是,您在<div class="container docviewer-wrapper">
<iframe id="docvieweriframe" src="http://www.pdf995.com/samples/pdf.pdf"></iframe>
</div>
组件中的请求开始之前收到错误。在您的请求完成之前,Sidebar
对象中没有groups属性。
如果您在venue
案例中添加此类检查,则该广告应运行良好:
"tips"
您可以将const itemTips = venueTips.tips.groups ? venueTips.tips.groups[0].items : [];
添加到您的reducer并检查groups
属性或选择其他方式,例如包装所有组件,包括length
组件,并显示Sidebar
而不是他们。像这样:
<强> VenueDetail.js 强>
Loader
Here已更新codesandbox。