使用上下文 API 在函数组件中未定义反应状态属性

BWeb303

我是 React 上下文 API 和函数组件挂钩的新手。我正在尝试将状态传递给子组件ActivityTable.js我将提供程序包裹在应用程序 ( App.js )周围,但是ActivityTable.js 中的状态属性仍未定义-- TypeError: Cannot read property 'id' of undefined

任何指导将不胜感激。


应用程序.js

import ActivityState from "./context/activities/ActivityState";

const App = () => {
  return (
    <StylesProvider injectFirst>
      <ContactState>
        <ActivityState>
          ...
        </ActivityState>
      </ContactState>
    </StylesProvider>
  );
};

export default App;

活动状态.js

import React, { useReducer } from 'react';
import ActivityContext from './ActivityContext';
import ActivityReducer from './ActivityReducer';
import { ADD_ACTIVITY, DELETE_ACTIVITY, SET_CURRENT_ACTIVITY } from '../types';

const ActivityState = props => {

    const initialState = {
        activities: [
            {
                id: 1,
                activity_description: "a desc",
                activity_name: "a",
            },
            {
                id: 2,
                activity_description: "b desc",
                activity_name: "b",
            },
            {
                id: 3,
                activity_description: "c desc",
                activity_name: "c",
            }
        ]
    };

    const [state, dispatch] = useReducer(ActivityReducer, initialState);

    const deleteActivity = id => {
        dispatch({ type: DELETE_ACTIVITY, payload: id });
    };

    const setCurrentActivity = activity => {
        dispatch({ type: SET_CURRENT_ACTIVITY, payload: activity });
    };

    return ( 
        <ActivityContext.Provider 
            value={{
                    activities: state.activities, 
                    deleteActivity,
                    setCurrentActivity
                }}>
           { props.children }
        </ActivityContext.Provider>
    );
}

export default ActivityState;

活动上下文.js

import { createContext } from "react";

const ActivityContext = createContext(null);

export default ActivityContext;

ActivityReducer.js

import { DELETE_ACTIVITY, SET_CURRENT_ACTIVITY } from '../types';

  export default (state, action) => {
    switch (action.type) {
      case DELETE_ACTIVITY:
        return {
          ...state,
          activities: state.activities.filter(
            activity => activity.id !== action.payload
          )
        };
      case SET_CURRENT_ACTIVITY:
        return {
          ...state,
          current: action.payload
        };
      default:
        return state;
    }
  };

活动视图.js

import React, { useContext } from "react";

import ActivityContext from '../../context/activities/ActivityContext';

import ActivityTable from './ActivityTable';

const Activities = () => {
    const activityContext = useContext(ActivityContext);

    const { activities } = activityContext;

    console.log('activities: ', activities);

    return (
        <div>
           <ActivityTable/>
        </div>
    );
}

export default Activities;

活动表.js

import React, { useContext, useState } from "react";
import ActivityContext from "../../context/activities/ActivityContext";

const ActivityTable = ({ activity }) => { //activity is undefined here
    const activityContext = useContext(ActivityContext);

    const { activities } = activityContext;

    const { id, activity_name, activity_desc } = activity; //undefined

    return (
        <div>
            <tr>
                <td>{id}</td>
                <td>{activity_name}</td>
                <td>{activity_desc}</td>
            </tr>
        </div>
    );
};

export default ActivityTable;
克里斯 B。

看起来您activity在 ActivityTable 中用作道具,但实际上从未提供该道具。

<ActivityTable activity={foo} />

我不知道您要传递给表的数据是什么。您在两个组件中都成功导入了上下文,但从未使用过上下文数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用上下文属性的JSP include指令

使用上下文API时出现此错误。TypeError:对象不可迭代(无法读取属性Symbol(Symbol.iterator))

如何在函数中使用上下文?

使用Mockito测试使用上下文的函数

如何在React Router V4中使用上下文API?

在odoo 9中使用上下文

反应上下文状态属性未定义

使用上下文API示例解释React高阶组件

制作树时无法使用上下文API

尝试使用上下文API时看到“渲染不是函数”

如何使用上下文在画布中旋转圆弧?

上下文API反应功能组件

如何测试使用上下文参数的Flask API

在React中使用上下文API

在TypeScript中使用上下文API

使用通用的Typescript反应上下文API

使用上下文测试组件并反应挂钩

无法从Promise,上下文API(反应钩子)读取未定义的属性“代码”

如何在 winevt.h Windows C++ API 中的 EvtSubscribe 中使用上下文参数

我如何用玩笑测试使用上下文 api 的反应组件?

在 React JS 中使用路由器时如何使用上下文 API 传递状态

在父上下文中反应使用上下文值

使用上下文 API (React.js) 仅更改状态对象中的特定键

在类组件上使用上下文

如何正确使用上下文反应?

为什么在无限获取循环中捕获使用上下文 API 的获取中的数据设置状态?

如何在反应中使用上下文 api 将数据从子组件更新到父组件?

如何测试使用上下文的 Azure 函数?

使用上下文提供程序的函數反應上下文 Api