首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法从api获取数据

无法从api获取数据
EN

Stack Overflow用户
提问于 2018-07-01 06:00:55
回答 1查看 51关注 0票数 -1

我试着请求对yandex地图进行地理编码。ymaps.geocode(cityname)返回一个promise。

我用的是类似的东西

action>index.js

代码语言:javascript
复制
    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

代码语言:javascript
复制
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已安装并已连接)

怎么了?如果我通过控制台启动它,它实际上会返回promise。

EN

回答 1

Stack Overflow用户

发布于 2018-07-01 06:22:06

如果您安装了redux-thunk,则可以通过以下方式从组件中分派操作:

代码语言:javascript
复制
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的函数

代码语言:javascript
复制
export function addWay(text) {
    return async dispatch => {
        try { 
            const request = await window.ymaps.geocode(text)
            dispatch({
                type: 'ADD_WAY',
                payload: request
            })
        } 
        catch (e) {}
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51118856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档