DeV*_*olt 11 javascript reactjs storybook
我想知道,在故事书中模拟 React 状态的“最佳实践”是什么(例如 *.stories.js)。
目前我正在尝试实现深色主题切换。
所以,我决定在我的故事文件中模拟这个状态。但是在装饰器中写这个似乎......很奇怪。你怎么解决这个问题?
/components/Header/Header.stories.js
import React, { useState } from "react";
import { Header } from "./Header";
export default {
title: "Components/Header",
component: Header,
decorators: [
(StoryFn) => {
// mock state
const [darkState, setDarkState] = useState(false);
const handleThemeChange = () => {
setDarkState(!darkState);
return darkState;
};
return (
<Header
enableThemeChange={true}
handleThemeChange={handleThemeChange}
darkState={darkState}
/>
);
}
]
};
const Template = (args) => <Header {...args} />;
export const Default = Template.bind({});
// define Controls
Default.args = {
enableThemeChange: true,
darkState: true
};
Run Code Online (Sandbox Code Playgroud)
考虑从这个角度来处理它:故事书应该展示各个组件,而不是其父组件的逻辑。请参阅故事书文档:
\n\n\n故事捕获 UI 组件的渲染状态。开发人员为每个组件编写多个故事,描述组件可以支持的所有 \xe2\x80\x9cinteresting\xe2\x80\x9d 状态。
\n
因此,我建议不要像您所做的那样模拟父组件和状态:
\n