reactjs - 无法从api获取数据
问题描述
我试图对 yandex 地图进行请求地理编码。ymaps.geocode(cityname) 返回一个承诺。
我用这样的东西
动作>index.js
export function addWay(text) {
return async dispatch => {
try {
const request = await window.ymaps.geocode(text)
debugger
dispatch({
type: 'ADD_WAY',
payload: request
})
}
catch (e) {}
}
}
MarkAdd.js
import React, { Component} from 'react';
import {addWay} from '../actions/index';
import { connect } from 'react-redux';
class MarkerAdd extends Component {
constructor(props) {
super(props);
this.state = {value:''}
}
onInputChange = e => {
this.setState({ value: e.target.value})
}
keyPress = e => {
if(e.keyCode === 13){
console.log('enter', e.target.value);
this.props.addWay(this.state.value);
this.setState({ value: ''})
}
}
render() {
return(
<div className="field">
<div className="control">
<input className="input is-medium"
type="text"
placeholder="Add mark"
onKeyDown={this.keyPress}
onChange={this.onInputChange}
value={this.state.value}
>
</input>
</div>
</div>
)
}
}
export default connect(null, {addWay})(MarkerAdd);
但是错误说:动作必须是普通对象。使用自定义中间件进行异步操作。(Redux Thunk 已安装并连接)
怎么了?如果我通过控制台启动它,它实际上会返回承诺。
解决方案
如果您已经redux-thunk
安装,那么您可以通过这种方式从组件调度操作:
import {addWay} from '../actions/index';
...
keyPress = e => {
if(e.keyCode === 13){
this.props.dispatch(addWay(this.state.value)); // <-- dispatch action
this.setState({ value: ''})
}
}
动作 itslef 必须返回一个接受的函数dispatch
:
export function addWay(text) {
return async dispatch => {
try {
const request = await window.ymaps.geocode(text)
dispatch({
type: 'ADD_WAY',
payload: request
})
}
catch (e) {}
}
}
推荐阅读
- android - Android view.setid(View.generateViewId()) 不起作用。它找不到附加到的视图
- opengl - 您是否将 OpenGL 项目从较旧的 glVertexAttribPointer 方法转换为较新的 glVertexAttribBinding 方法?
- python - 我如何下载 requirements.txt?
- javascript - 如何添加私钥以将智能合约部署到 Roptsen?
- probability - 设计一个实验,从 100 个硬币中找出不公平的硬币
- docbook - 如何为非技术性写作定制 DocBook?
- reactjs - 从 router.query 中正确提取字符串
- java - 在二叉树中插入字符串
- windows - 通过 ssh 向 Windows 服务器传递命令
- wordpress - wordpress 上的图片、链接和按钮不起作用