Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React UI库React钩子的最佳实践_Reactjs_User Interface_Components_React Hooks_Storybook - Fatal编程技术网

Reactjs React UI库React钩子的最佳实践

Reactjs React UI库React钩子的最佳实践,reactjs,user-interface,components,react-hooks,storybook,Reactjs,User Interface,Components,React Hooks,Storybook,嘿,我正在创建一个带有可重用组件的React UI库。所有组件都是功能组件 我使用故事书来展示组件 我对表单、切换按钮、选择框和下拉列表等组件有疑问 构建此类可重用组件的最佳方法是什么?因为您应该能够在父组件中获取值或布尔值,如果切换按钮为true或下拉列表打开 组件本身应该有一个状态吗?或者组件应该是无状态的,父组件应该管理状态和函数,并将其作为道具提供给我的库组件?有没有有用的例子 例如,我的切换按钮组件: import React, { FunctionComponent, useStat

嘿,我正在创建一个带有可重用组件的React UI库。所有组件都是功能组件

我使用故事书来展示组件

我对表单、切换按钮、选择框和下拉列表等组件有疑问

构建此类可重用组件的最佳方法是什么?因为您应该能够在父组件中获取值或布尔值,如果切换按钮为true或下拉列表打开

组件本身应该有一个状态吗?或者组件应该是无状态的,父组件应该管理状态和函数,并将其作为道具提供给我的库组件?有没有有用的例子

例如,我的切换按钮组件:

import React, { FunctionComponent, useState } from 'react';

export interface IProps {
  onToggle?: (open: boolean) => void;
  onClick?: () => void;
}

const ButtonToggle: FunctionComponent<ButtonSwitchProps> = ({
  onToggle,
  onClick
}: ButtonSwitchProps) => {
  const [dropdownOpen, setDropdownOpen] = useState(false);

  const toggle = (): void => {
    setDropdownOpen(prevState => !prevState);
    if (onToggle) onToggle(!dropdownOpen);
  };

  return (
    <SwitchButtonStyle onClick={toggle}>
      {!dropdownOpen ? 'All' : 'None'}
    </SwitchButtonStyle>
  );
};

export default ButtonToggle;
库组件:

import React, { FunctionComponent, useState } from 'react';

export interface IProps {
  onToggle?: (open: boolean) => void;
  onClick?: () => void;
}

const ButtonToggle: FunctionComponent<ButtonSwitchProps> = ({
  onToggle,
  onClick
}: ButtonSwitchProps) => {
  const [dropdownOpen, setDropdownOpen] = useState(false);

  const toggle = (): void => {
    setDropdownOpen(prevState => !prevState);
    if (onToggle) onToggle(!dropdownOpen);
  };

  return (
    <SwitchButtonStyle onClick={toggle}>
      {!dropdownOpen ? 'All' : 'None'}
    </SwitchButtonStyle>
  );
};

export default ButtonToggle;
import React,{FunctionComponent,useState}来自'React';
导出接口IProps{
onToggle?:(打开:布尔)=>void;
onClick?:()=>void;
}
常量按钮切换:函数组件=({
格洛格,
onClick
}:按钮开关道具)=>{
const[dropdownOpen,setDropdownOpen]=useState(false);
常量切换=():无效=>{
setDropdownOpen(prevState=>!prevState);
如果(onToggle)onToggle(!dropdownOpen);
};
返回(
{!dropdownOpen?'All':'None'}
);
};
导出默认按钮切换;
以及Storybook中的示例用法:

import React, { FunctionComponent } from 'react';
import { action } from '@storybook/addon-actions';
import ButtonToggle from './ButtonToggle';

export default {
  component: ButtonToggle,
  title: 'ButtonToggle',
};

export const Toggle: FunctionComponent = () => {
  return (
    <ButtonToggle onToggle={action('onToggle')} />
  );
};
import React,{FunctionComponent}来自“React”;
从“@storybook/addon actions”导入{action};
从“./ButtonToggle”导入ButtonToggle;
导出默认值{
组件:按钮切换,
标题:'按钮切换',
};
导出常量切换:FunctionComponent=()=>{
返回(
);
};
我在父级中使用onToggle函数。action插件在storybook中显示布尔值。对于可重用UI库来说,更好、更有效的方法是在父组件中使用状态,不是吗?因此,UI库具有无状态组件,当您使用该库时,必须控制状态


我希望有人能给我一些TIPP,也许还有一些列出的组件的例子,特别是一个复杂的可重用下拉组件。非常感谢。

我最近也走了一条类似的道路:我的收获是您可以在库组件中使用状态,但您需要小心,应该在effects中调用回调。如果你想交流知识,请毫不犹豫地与我联系。我最近走了一条类似的道路:我的收获是你可以在你的库组件中使用状态,但你需要小心,应该在effects中调用回调。如果你想交流知识,请随时与我联系。