useRef 的值在 useEffect 函数中未定义

Value of useRef is undefined inside the useEffect function

根据 useEffect 的文档,它在呈现 HTML 元素之后开始,所以为什么我在 [=11= 中将 useRef 钩子的值设为未定义] 功能。 如何在此代码中使用 useEffect 设置输入字段的值。

  const territoryName = useRef();
  const [isLoading, setIsLoading] = useState(true);
  const [isDisabled, setIsDisabled] = useState(false);
  const [selectedColor, setSelectedColor] = useState("");
  const history = useHistory();
  const homepageRoute = useRouteLink("");

  const appContext = useContext(APP_CONTEXT);
  const { user, regionData, areaData, editId, displayedMap, existingPolygons } = appContext;



  useEffect(() => {
    if (!user.name || !regionData.length) {
      return history.push(homepageRoute);
    }
    else if (!areaData[editId]) {
      return errorToast("Invalid Region");
    }
    locateRegion(displayedMap, JSON.parse(areaData[editId]?.polygonVertices));
    setSelectedColor(areaData[editId]?.colorCode);
    territoryName?.current?.setValue(areaData[editId]?.mapName);
    console.log(territoryName.current) // Prints undefined
    setIsLoading(false);
  }, []);

return (
    <>
      <ToastContainer autoClose={3000} />
      <Sidebar isLoading={isLoading} isDisabled={isDisabled}>
        <SidebarHeader headerText={"Edit Territory"} showBackIcon />
        <HorizontalLine />
        <div className="modifypage-sidebar">
          <SidebarContent>
            <Input
              name="territory-name"
              ref={territoryName}
              id="territory-name"
              placeholder="Enter Territory Name"
              label="Territory Name"
            />
            <ColorPallet
              // selectedColor={selectedColor} onColorChange={onColorChange}
            />
          </SidebarContent>
          <HorizontalLine />
        </ div>

        <SidebarFooter
          text="Save"
          help="Save Changes"
          // handler={() => { updateArea(oldValues, territoryName.current.getValue(), selectedColor) }}
        />
      </Sidebar>
    </>
  )

当 useEffect 回调首先 运行 时,useRef 可能未定义,因此解决方案可能是监听 ref 的变化,检查它是否已定义,然后才继续执行该函数。

可以找到有关可能解决方案的更多信息here