next.js ReactJS错误为“此组件必须在组件内部使用< RecoilRoot>”,

zy1mlcev  于 2022-11-05  发布在  React
关注(0)|答案(3)|浏览(472)

但是我稍微扭曲了一下,我没有布局,而是一个每页的组件,我想把它添加到标题中。
我收到以下错误:

Account.jsx类似于以下内容:

import { useRecoilValue } from "recoil";
import { userProfile } from "../../../recoil";

export default function Account() {
    const profile = useRecoilValue(userProfile);

    return (
        <div className="w-screen h-full ">
            <header>
                <Navbar profile={dataMe} />
            </header>
            <main className="h-screen relative">
                <div className='h-screen flex bg-gray-bg my-15 static'>
                    <div className='w-full mt-10 m-auto bg-white rounded-lg border'>
                        <div>
                            <div>
                                <dataMe />
                            </div>

                            <DetailAccount />
                        </div>
                    </div>
                </div>
            </main>
        </div >
    );
};
dbf7pr2w

dbf7pr2w1#

如果您希望组件使用反冲功能,则必须将组件 Package 在RecoilRoot中。https://recoiljs.org/docs/api-reference/core/RecoilRoot/
因此,在使用useRecoilValue挂钩之前,必须将代码 Package 在<RecoilRoot>中。
示例:

import {RecoilRoot} from 'recoil';

function AppRoot() {
  return (
    <RecoilRoot>
      <ComponentThatUsesRecoil />
    </RecoilRoot>
  );
}

建议在根(App.tsx或任何根元素的名称)上使用这个钩子,这样所有其他组件就可以按预期使用Recoil钩子,而不必每次都将组件 Package 在RecoilRoot中。

ttygqcqt

ttygqcqt2#

要正确使用Recoil(* React* 的状态管理库),您必须添加RecoilRoot Package 组件。
使用反冲状态的组件需要RecoilRoot出现在父树中的某个位置。

示例来自 * 官方docs*

import React from 'react';
import Account from './Account.jsx';
import {
  RecoilRoot,
  atom,
  selector,
  useRecoilState,
  useRecoilValue,
} from 'recoil';

function App() {
  return (
    <RecoilRoot>
      <ComponentsThatUseRecoilState />
      {/* in Your case <Account /> component */}
    </RecoilRoot>
  );
}
mftmpeh8

mftmpeh83#

您需要在App组件上使用RecoilRoot组件。例如:
在App.js文件上

import React from 'react';
import { RecoilRoot } from 'recoil';
import Account from './Account.jsx';

function App() {
  return (
    <RecoilRoot>
      <Account />
    </RecoilRoot>
  );
}

相关问题