Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 依赖Context.Provider在React的组件树的较高位置是否是反模式?_Reactjs - Fatal编程技术网

Reactjs 依赖Context.Provider在React的组件树的较高位置是否是反模式?

Reactjs 依赖Context.Provider在React的组件树的较高位置是否是反模式?,reactjs,Reactjs,考虑以下组成部分: import React, {useContext} from "react"; import FormContext from "../FormContext"; const Input = ({ name }) => { const getInputValue = useContext(FormContext); return <input name={name} value={getInputValue(name)} />; } impor

考虑以下组成部分:

import React, {useContext} from "react";
import FormContext from "../FormContext";

const Input = ({ name }) => {
  const getInputValue = useContext(FormContext);
  return <input name={name} value={getInputValue(name)} />;
}
import React,{useContext}来自“React”;
从“./FormContext”导入FormContext;
常量输入=({name})=>{
const getInputValue=useContext(FormContext);
返回;
}
是否依赖于
typeof getInputValue==“function”
而不检查它被视为反模式?因为它将此组件的使用位置限制为组件树中某个位置定义了FormContext的位置

我看过一些关于这方面的文章和讨论,但现在找不到。 不包括本案


但是,对于
useContext
而言,如果在树中找不到更高的上下文,请不要假设
useContext
可能返回未定义的

我认为这更像是一个存在的问题。如何知道从其他文件导入的变量是否为函数?这是你的应用程序,如果你能假设什么是什么,你就是最好的访问者


关于你的直接问题:不,这不是反模式。

让我们假设这是一些项目使用的组件库中的一个组件,在这种情况下,我限制开发人员在这些项目上工作。他们不能直接更改我的组件,也可能不知道它是如何实现的。在这种情况下,情况变得更加复杂。对我来说,这里唯一的反模式是使用
useContext
,而之前没有设置
ContextProvider
。这是一种反模式,因为
context
希望用户设置提供者,这就是它的工作方式。您可以做的是创建一个自定义钩子来检查是否所有东西都在那里。您可以在钩子中使用
useContext