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
。