【发布时间】:2021-10-08 01:31:05
【问题描述】:
带有道具值的默认初始状态
activeTab 在TabContext 举行
我无法在此处设置默认状态,因为我不知道如何在 TabContext 组件中访问 Tab 组件的 prop 值。
TabContext.js
const TabContext = createContext();
export function useTab() {
return useContext(TabContext);
}
const TabProvider = ({ children }) => {
const [activeTab, setActiveTab] = useState();
const toggleTab = (title) => {
setActiveTab(title);
};
return (
<TabContext.Provider value={[activeTab, toggleTab]}>
{children}
</TabContext.Provider>
);
};
export default TabProvider;
用法
<TabProvider>
<TabContainer>
<Tab title='One' defaultTab/>
<Tab title='Two' />
</TabContainer>
</TabProvider>
Tab 组件
-
activeTab状态被useTab()钩子访问 -
toggleTab将状态设置为输入的任何内容。 - 我尝试了
useEffect(),但由于状态更改它会创建无限循环,并且activeTab 卡在Tab组件的title属性上。
const Tab = ({ title, defaultTab }) => {
const [activeTab, toggleTab] = useTab();
useEffect(() => {
if (defaultTab) {
toggleTab(title);
}
}, []);
return (
<div
className={(activeTab === title ? 'text-blue-600' : 'text-gray-900')}
onClick={() => {
toggleTab(title);
}}
>
{title}
</div>
);
};
期望结果:activeTab 默认状态是Tab 组件的title 属性值,当它具有defaultTab 属性时,同时允许之后根据点击更改状态。还使defaultTab 下TabContainer 下的选项卡组件之一所需的道具@
【问题讨论】:
标签: javascript reactjs state