自定义钩子工厂可以在项目中工作,但不能作为npm依赖项

时间:2019-08-26 15:58:43

标签: javascript reactjs create-react-app react-hooks react-scripts

我试图将这个自定义钩子创建工厂功能从应用程序分解到库中。我将其移至其自己的项目中,确保测试仍然通过,依此类推。然后在我对原始项目进行更改之前进行测试,我npm install ../path/to/extracted/library并更改了原始项目中的导入。直到现在,我收到一个无效的挂接调用错误。这是库项目中的构建文件:

import React, { createContext, useContext, useReducer } from 'react';

export default () => {
  const StateContext = createContext([{}, (() => { })]);
  const CtxProvider = ({ reducer, children, initialState = {}, }) => {
    const [state, dispatch] = useReducer(reducer, initialState);
    return React.createElement(StateContext.Provider, { value: [state, dispatch] }, children);
  };

  return [
    () => useContext(StateContext),
    CtxProvider,
  ];
};

这是一家工厂,该工厂返回具有自定义钩子的元组,该自定义钩子产生一个上下文值和reducer调度函数,以及一个提供程序组件,该组件将reducer和初始状态作为props并提供上下文。当我这样通过npm导入

import customHookFactory from 'extracted-libaray-name';

我收到无效的挂接调用错误。

当我将复制粘贴的完全相同的代码导入本地文件时,如下所示:

import customHookFactory from '../utils/local-file';

我没有得到错误。 ??我正在使用从CRA开始的react-scripts“开始”进行开发,并且我假设它正在对本地项目文件做某事,而对node_modules却没有做,反之亦然,但是我不知道是什么。

1 个答案:

答案 0 :(得分:0)

好的,经过大量的阅读并阅读了suggestions from the React error之后,我们才知道了。

我已将React和react-dom列为提取的库的依赖项,而不是对等依赖项,因此它们是react的不同副本。更改提取的库以将React用作peerDependency并重新安装修复它。