首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的状态管理-如何正确获取和传递数据?

简单的状态管理-如何正确获取和传递数据?
EN

Stack Overflow用户
提问于 2019-06-23 04:34:04
回答 1查看 602关注 0票数 2

我正在为React使用简单的状态管理。我想从一个商店位置创建多个Axios调用,并将其导入到需要显示正确数据的每个页面中。例如,我正在尝试获取一个JSON占位符数据,并在组件内部使用该数据通过Hooks将其推送到状态。

但我得到以下错误:

代码语言:javascript
复制
model.js:14 Uncaught (in promise) TypeError: actions.setTodos is not a function
    at model.js:14

有人能帮帮我吗?我做错了什么?

我的商店代码(model.js):

代码语言:javascript
复制
import { thunk } from 'easy-peasy';

export default {
    todos: [],
    fetchTodos: thunk(async actions => {
        const res = await fetch(
            'https://jsonplaceholder.typicode.com/todos?_limit=10'
        );
        const todos = res.json();

        actions.setTodos(todos);
    }),
};

我的页面组件联系人:

代码语言:javascript
复制
import React, { useState, useEffect } from 'react';

import { useStoreActions } from 'easy-peasy';

import ReactHtmlParser from 'react-html-parser';

import { API_URL } from 'constants/import';

// import axios from 'axios';

const Contact = () => {
    const [contactPage, setContactPage] = useState([]);

    const { page_title, page_content, page_featured_image } = contactPage;

    const fetchTodos = useStoreActions(actions => actions.fetchTodos);

    useEffect(() => {
        fetchTodos();
    }, []);

    return (
        <section className="contact">
            <div className="page">
                <div className="row">
                    <div className="col-xs-12">
                        <h3 className="section__title">{page_title}</h3>
                        {ReactHtmlParser(page_content)}
                        {page_featured_image && (
                            <img src={API_URL + page_featured_image.path} />
                        )}
                    </div>
                </div>
            </div>
        </section>
    );
};

export default Contact;
EN

回答 1

Stack Overflow用户

发布于 2021-05-20 21:47:44

你需要使用action。

代码语言:javascript
复制
import { action, thunk } from "easy-peasy";

export default {
    fetchTodos: thunk(async (actions, payload) => {
        const res = await fetch(
            "https://jsonplaceholder.typicode.com/todos?_limit=10"
        );
        const todos = res.json();

        actions.setTodos(todos);
    }),

    
    todos: [],
    setTodos: action((state, payload) => {
        console.log("---->>> payload!")
        state.todos = payload
    }),

};

我通常这样使用它,它对我来说工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56718993

复制
相关文章

相似问题

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