Javascript 如何更新故事书中的组件道具
我正在使用Javascript 如何更新故事书中的组件道具,javascript,reactjs,storybook,Javascript,Reactjs,Storybook,我正在使用故事书()独立地玩我的组件。我想模拟所有的流量循环(在完整的应用程序中,它是在redux的帮助下完成的),并使用故事中的一个简单对象更新属性,但我缺少了一些东西 storiesOf('Color picker', module).add('base', () => { let colorPickerState = { changeColor: function(data) { this.color = data.color },
故事书
()独立地玩我的组件。我想模拟所有的流量循环(在完整的应用程序中,它是在redux
的帮助下完成的),并使用故事中的一个简单对象更新属性,但我缺少了一些东西
storiesOf('Color picker', module).add('base', () => {
let colorPickerState = {
changeColor: function(data) {
this.color = data.color
},
color: '#00aced'
}
return (
<ColorPicker
name="color"
onChange={colorPickerState.changeColor.bind(colorPickerState)}
value={colorPickerState.color}
/>
)
}
storiesOf('Color picker',module)。添加('base',()=>{
让colorPickerState={
changeColor:函数(数据){
this.color=data.color
},
颜色:“#00aced”
}
返回(
)
}
我希望在调用onChange
时更新的值属性;我可以看到colorPickerState.color
的值被正确更新,但组件不会重新渲染
我缺少什么?您可以使用一个插件来实现这一点:
因此,您的代码如下所示:
import { State, Store } from '@sambego/storybook-state';
const store = new Store({
value: '#00aced',
});
storiesOf('Color picker', module).add('base', () => {
return (
<State store={store}>
<ColorPicker
name="color"
onChange={(data) => store.set({ value: data.color })}
/>
</State>
)
}
从'@sambego/storybook State'导入{State,Store};
常量存储=新存储({
值:“#00aced”,
});
storiesOf('Color picker',module).添加('base',()=>{
返回(
store.set({value:data.color})}
/>
)
}
您可以编写一个虚拟组件,该组件将在其中呈现真实故事组件,然后您可以获得该虚拟组件的状态
属性
在下面的例子中,我使用了一个滑块组件的故事
stories.addDecorator(带旋钮)
.add('滑块',()=>{
//创建包裹滑块并允许以下状态的虚拟组件:
类StoryComp扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
值:this.props.value | | 0,
}
}
onValueChange=value=>this.setState({value})
render(){
常量道具={
…这是道具,
onValueChange:this.onValueChange,//我会尝试使用react中的useState
钩子-通过其设置器更新状态值似乎有重新呈现故事书组件的效果
我遇到了一个类似的问题,我的数据输入表单的状态和事件处理(包括复杂的验证)是在全局范围内完成的,在组件树的某个级别上。通过编写一个简单的事件处理程序传递给我的组件,我能够得到这个组件及其复杂验证的工作演示
请注意,我的代码是用Typescript编写的。我对React这个世界相当陌生,所以这可能并不完美
//其他地方定义的内容:IComponentProps、IValidationResult、IFormInput、EntryForm
//useState和useCallbac来自react
导出常量MyComponentDemo=(args:IComponentProps)=>{
const[validations,setValidations]=useState([]);
常量[theForm,setTheForm]=使用状态(
{
…args.formValues,
//在此处设置其他有趣的默认表单值
}
);
const dummyValidationMethod=useCallback((形式:IFormInput)=>{
let验证:IValidationResult[]=[];
//使用表单中的数据进行验证
设置验证(验证);
抵消形式(形式);
}, []);
返回(
);
};
不使用第三方软件包怎么样?ColorPicker
如何使用状态下的存储
?(不清楚)@vsync通过传递store={store}声明我可能错了,但我认为@vsync问的是,在ColorPicker组件中,如何使用存储在存储中的值
?即使他们没有问这个问题,我也很想知道答案?从哪里导入“storybookWrapper”来自?@huseyin39-我的错误,我应该删除它,因为它只与我的实现相关(当时)[答案更新]
stories.addDecorator(withKnobs)
.add('Slider', () => {
// create dummy component that wraps the Slider and allows state:
class StoryComp extends React.Component {
constructor( props ){
super(props);
this.state = {
value : this.props.value || 0,
}
}
onValueChange = value => this.setState({ value })
render(){
const props = {
...this.props,
onValueChange:this.onValueChange, // <--- Reason "StoryComp" is needed
value:this.state.value // <--- Reason "StoryComp" is needed
}
return <Slider {...props} />
}
}
// knobs (customaziable props)
const widthKnobOptions = {
range : true,
min : 200,
max : 1500,
step : 1
}
const props = {
value : number('value', 200000),
min : number('min', 100),
step : number('step', 1000),
max : number('max', 1000000),
width : number('width', 700, widthKnobOptions)
}
return <StoryComp {...props} />
}
);