Storybook: рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреБрдВрдбреА рдмрджрд▓реЗрдВ [рд╡рд┐рдЪрд╛рд░]

рдХреЛ рдирд┐рд░реНрдорд┐рдд 9 рдЬреБрд▓ре░ 2018  ┬╖  55рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: storybookjs/storybook

рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдм рддрдХ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИред рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рд╕реЗ рдореИрдВрдиреЗ рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╢реБрджреНрдз "рд╕реНрдЯреЗрдЯрд▓реЗрд╕" рдШрдЯрдХреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рд╣реИ рдЬреЛ checked рдкреНрд░реЛрдк рд▓реЗрддрд╛ рд╣реИред рдЪреЗрдХрдмреЙрдХреНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдЪрд╛рд▓реВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ onChange , рдФрд░ рдПрдХ рдЕрджреНрдпрддрди checked рдкреНрд░реЛрдк рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдкрд░ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ https://github.com/storybooks/storybook/issues/197 рдЬреИрд╕реЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рдПрдХ рд░реИрдкрд░ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдПрдХ рдФрд░ рдРрдб-рдСрди рдЬреЛрдбрд╝реЗрдВред рдЕрдЧрд░ рдореИрдВ рдЗрд╕рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдПрдХ рдШрдЯрдХ рдЖрд╡рд░рдг рдирд╣реАрдВ рдмрдирд╛рдКрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреА рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдореБрдЭреЗ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдерд╛, рд╡рд╣ рд╣реИ actions рдРрдб-рдСрди рдХреЛ knobs рд╕рд╛рде рд╡рд╛рдпрд░ рдХрд░рдирд╛, рдЬрд┐рд╕рд╕реЗ рдиреЙрдмреНрд╕ рдХреЛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЯреЙрдЧрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдХрдо рд╕реЗ рдХрдо рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдареЛрдХрд░ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рд░реИрдкрд░ рдШрдЯрдХ рдмрдирд╛рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП?

knobs feature request todo

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рдо рд▓рдЧрднрдЧ 5.3 (рдЬрдирд╡рд░реА рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝) рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ 6.0 (рджреЗрд░ рд╕реЗ рдорд╛рд░реНрдЪ рд░рд┐рд▓реАрдЬрд╝) рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЙрдмреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рдиреЙрдмреНрд╕ рдХреЗ рдореБрджреНрджреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣рд▓ рдХрд░реЗрдЧрд╛ред рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдЖрдкрдХреЗ рдзреИрд░реНрдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕рднреА 55 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕ #3701 рдкреАрдЖрд░ рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдерд╛ (рдФрд░ рд╡рд┐рд▓рдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред

рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдПрдХ рдЪрд░реНрдЪрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдкреАрдЖрдИ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ =)ред

рдЖрд╣ рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ рд╡рд╣ рдкреАрдЖрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ рдерд╛ред рдзрдиреНрдпрд╡рд╛рдж @aherriot рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИред

рдПрдкреАрдЖрдИ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓рднреВрдд рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рд╕рд╣рдорддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреАрдЖрд░ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ @Hypnosphi рд╕реЗ рдерд╛:

рдореБрдЭреЗ рдпрд╣ рддрдереНрдп рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рддреНрдп рдХреЗ рдХрдИ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ (рдШрдЯрдХ рдХреЙрд▓рдмреИрдХ рдФрд░ рдпреВрдЖрдИ рдиреЙрдмреНрд╕)

рдореБрдЭреЗ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЪрд╛рд░ рд╕рддреНрдп рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдиреЗ рдХрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдШрдЯрдХ рдЕрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП рд╕рддреНрдп рдХреЗ рдПрдХ _рдПрдХрд▓_ рд╕реНрд░реЛрдд рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИ - рдиреЙрдмреНрд╕ред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдЕрдиреНрдп рд╕рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдЖрд╡рд░рдг рдШрдЯрдХ, рд░рд╛рдЬреНрдп рдРрдб-рдСрди, рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рддреНрдп рдХрд╛ рдПрдХ рдФрд░ рд╕реНрд░реЛрдд рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред рдореЗрд░реЗ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ checked рд▓рд┐рдП рдПрдХ рдШреБрдВрдбреА рдирд╣реАрдВ рд░рдЦ рдкрд╛рдКрдВрдЧрд╛, рдФрд░ рдПрдХ рд░реИрдкрд░ рдШрдЯрдХ рдХреЛ checked рдкреНрд░реЛрдк рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреВрдВрдЧрд╛ред рдореИрдВ рдиреЙрдмреНрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдХреЛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдкреИрд░реЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕реЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕реЗ рдХреЛрдИ рдХреЙрд▓рдмреИрдХ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХрддрд░рдлрд╛ рд╣реИ рдФрд░ рди рдХрд┐ рдХреИрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдРрдкреНрд╕ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдиреЙрдмреНрд╕ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░, рдХрд╣рд╛рдиреА рдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рддрдВрддреНрд░ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рд╕реНрддреБрддрд┐рдХрд░рдг рдШрдЯрдХ рдЬреИрд╕реЗ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕реНрд╡рдпрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкрдиреЗ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд░реЗрдбрдХреНрд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ setState рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ withState рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рд╕реЗ рдХрд░рддрд╛ рд╣реЛ, рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЙрдкреНрд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдиреЙрдмреНрд╕ред

рд╡реИрд╕реЗ рднреА рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдирдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╕рд╣рдЬ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдЧрд░ рдореИрдВ рдСрдл-рдмреЗрд╕ рд╣реВрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реБрджреНрдз рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдШрдЯрдХреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд "рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕" рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдХреЛрдИ рдореБрдЭреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдирдорд╕реНрддреЗ :)

рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдШрдЯрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдореЛрдмрд╛рдЗрд▓ рд▓реЗрдЖрдЙрдЯ (рдпрд╛ рдирд╣реАрдВ) рдХреЛ рдкреНрд░реЙрдкреНрд╕ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рд╡реНрдпреВрдкреЛрд░реНрдЯ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдореЗрд░реЗ рдиреЙрдм рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдерд╛, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛;)

рдмрд╕ рдпрд╣рд╛рдВ рдЕрдкрдирд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ @IanVS рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдПрдХ рдХреЙрд▓рдмреИрдХ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ (рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореИрдВ рдЕрдкрдиреЗ isMobile рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ)

рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧ рдиреЙрдм рд╕реНрдЯреЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╣рдо рдПрдХ рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪреВрдВрдХрд┐ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@Hypnosphi , рдЖрдкрдХреЛ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, WDYT рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрддреНрддрд┐ рдереА?

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рдЕрднреА рднреА рдЙрддреНрд╕реБрдХрддрд╛ рд╣реИ рдХрд┐ @Hypnosphi рдХрд╛ рдпрд╣рд╛рдБ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд @igor-dv рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИред

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЪрд╛рд░ рд╕рддреНрдп рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдШрдЯрдХ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рд╕рддреНрдп рдХреЗ рдПрдХ рд╕реНрд░реЛрдд рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИ - рдШреБрдВрдбреАред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдЕрдиреНрдп рд╕рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдЖрд╡рд░рдг рдШрдЯрдХ, рд░рд╛рдЬреНрдп рдРрдб-рдСрди, рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рддреНрдп рдХрд╛ рдПрдХ рдФрд░ рд╕реНрд░реЛрдд рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред рдореЗрд░реЗ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдЪреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдШреБрдВрдбреА рдирд╣реАрдВ рд░рдЦ рдкрд╛рдКрдВрдЧрд╛, рдФрд░ рдПрдХ рд░реИрдкрд░ рдШрдЯрдХ рдХреЛ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдк рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреВрдВрдЧрд╛ред рдореИрдВ рдиреЙрдмреНрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдХреЛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдкреИрд░реЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕реЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕реЗ рдХреЛрдИ рдХреЙрд▓рдмреИрдХ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХрддрд░рдлрд╛ рд╣реИ рдФрд░ рди рдХрд┐ рдХреИрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдРрдкреНрд╕ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдореЗрд░реЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рдЖрдЗрдП рдПрдкреАрдЖрдИ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ

рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди рдлреАрдЪрд░ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдмрд╕ рдПрдХ рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рдПрдХ рд╣реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдореЗрдВ рднреА рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╡рд░реНрддрдорд╛рди рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдмрдиреЗ рд░рд╣рдирд╛ рдереЛрдбрд╝рд╛ рдЪреБрдиреМрддреА рднрд░рд╛ рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const {value: name, change: setName} = text('Name', 'Kent');

@brunoreis , рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдиреЙрдмреНрд╕ рдХреЗ рд░рд┐рдЯрд░реНрди рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдХреЛ рдмрджрд▓рдирд╛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред рдореЗрд░рд╛ рдСрдл-рдж-рдХрдл рд╕реБрдЭрд╛рд╡ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

import {boolean, changeBoolean} from '@storybook/addon-knobs/react';

stories.add('custom checkbox', () => (
    <MyCheckbox
        checked={boolean('checked', false)}
        onChange={(isChecked) => changeBoolean('checked', isChecked)} />
));

рдЬрд╣рд╛рдВ onChange рдХреЙрд▓рдмреИрдХ рднреА рдХрд░реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рднреА рдХрд╛рдо рдХрд░реЗ:

onChange={(isChecked) => changeBoolean('checked')(isChecked)}

// which of course simplifies down to
onChange={changeBoolean('checked')}

рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдШреБрдВрдбреА рдХреЗ рд▓реЗрдмрд▓ рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдиреЙрдмреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓реЗ рдмрд┐рдирд╛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред (рдЬрдм рддрдХ рдХрд┐ рд▓реЗрдмрд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╣реИрдВ ...)

@IanVS , рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЪреАрдЬреЛрдВ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдмрд▓ рдХреЛ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ред рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ @Hypnosphi рдХреЗ рдорди рдореЗрдВ рдХреНрдпрд╛ рд╣реИред

рдиреЙрдмреНрд╕ рдХреЗ рд░рд┐рдЯрд░реНрди рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдХреЛ рдмрджрд▓рдирд╛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рд╣реЛрдЧрд╛

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдЖрдЧрд╛рдореА рд╣реИред рд▓реЗрдХрд┐рди рдХреБрдЫ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдХрд░реА рд╕рдорд░реНрдерди рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред

рдЬрдм рддрдХ рдХрд┐ рд▓реЗрдмрд▓ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ?

рд╣рд╛рдБ, рд╡реЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ change<Type> рдирд┐рд░реНрдпрд╛рдд рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдмрд╕ change рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ https://github.com/storybooks/storybook/pull/3701 . рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд╕ рдкреАрдЖрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реВрдВрдЧрд╛ рддрд╛рдХрд┐

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

const {value: name, change: setName} = text('Name', 'Kent');

text рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ред

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЧреБрдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╕реНрддреБ рдХреЛ рдирд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

screen shot 2018-09-19 at 00 08 35

@ndelangen text рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:

const { foo, bar } = x() // note the parens

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдирд╛рдо рд╡рд┐рд╡рд╛рджрд┐рдд рд╣реИ):

const {value: name, change: setName} = text.mutable('Name', 'Kent');

рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛?

const { foo, bar } = x() // note the parens

x рдХреА рд╡рд╛рдкрд╕реА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЧреБрдг рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

screen shot 2018-09-23 at 14 12 28

рдореИрдВ рдЖрдкрдХреЗ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ x = () => {} рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдпрджрд┐ рд╣рдо text рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдирд╛ рдХреЛрдб рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:

// Before
<Foo bar={text('Bar', '')}>

// After
<Foo bar={text('Bar', '')()}>
                         ^^ this

рд╕рдордЭрд╛

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @IanVS рд╕реБрдЭрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

"рд╡рд┐рдирд╛рд╢" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛, рдЬреИрд╕реЗ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реБрдХ" рдХреЗ рд╕рд╛рде ?:

const [foo, setFoo] = useString('foo', 'default');

@DimaRGB . рдЬреИрд╕рд╛ рд╣реА рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛
рдореМрдЬреВрджрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╣реБрдХ рдЬреИрд╕реА рдХреЙрд▓ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

.add('example', () => {
  const [selected, setSelected] = useBool(false);

  return <SomeComponent selected={selected} onSelected={setSelected} />
})

рд╕рд╛рдордпрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ props рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдПрдХ рдШрдЯрдХ рдореЗрдВ рдХреБрдЫ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ рдкреНрд░реЛрдк рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ (рдореИрдВ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХрднреА-рдХрднреА рдПрдХ рдиреЗрд╡реА рдмрд╛рд░ рдореЗрдиреВ рдореЗрдВ рдореБрдЭреЗ рдЦреБрдж рдХреЛ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдпрджрд┐ рдХреЛрдИ рдмрдЪреНрдЪрд╛ рддрддреНрд╡ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

@IanVS рдореЗрд░реЗ рдкрд╛рд╕ рдареАрдХ рд╡реИрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬрд╣рд╛рдВ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреЙрдЧрд▓ рдШрдЯрдХ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдкреИрд░реЗрдВрдЯ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдмрд╛рд░ рд╕реНрдЯреЛрд░реАрдмреБрдХ рд╕реНрдЯреЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдЯреЙрдЧрд▓ рдХрд░рддрд╛ рд╣реИ, UI рд╕реНрдерд┐рддрд┐ рдиреЙрдмреНрд╕ рдкреИрдирд▓ рдореЗрдВ рдЬреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИред рдореИрдВрдиреЗ @storybook/addons-knobs рд╕реЗ рдПрдХ рдирд┐рдЬреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╣реИрдХ рдХрд┐рдпрд╛ - рдПрдХ рдЖрд╕рд╛рди рд╕реБрдЭрд╛рд╡ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

import { manager } from '@storybook/addons-knob/dist/registerKnobs.js'

const { knobStore } = manager
// The name given to your knob - i.e:  `select("Checked", options, defaultValue)`
knobStore.store['Checked'].value = newValue
// Danger zone! _mayCallChannel() triggers a re-render of the _whole_ knobs form.
manager._mayCallChannel()

@erickwilder рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рд╡рд╣ рдХрднреА рднреА рдиреЙрдм рдлреЙрд░реНрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ (рднрд▓реЗ рд╣реА рдЙрд╕рдиреЗ рдШрдЯрдХ рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реЛ)ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

рдирд╣реАрдВ; рдореИрдВрдиреЗ рдЕрднреА рдЙрд╕ рдЕрдкрдбреЗрдЯ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 'рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд' рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдмрд╣реБ-рдЪрдпрди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдХреЗ рдФрд░ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЭреЗ рдЕрджреНрдпрддрди рдорд╛рди рдШреБрдВрдбреА рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП:

// Ditch when https://github.com/storybooks/storybook/issues/3855 gets resolved properly.
function FixMeKnobUpdate(name, value) {
    addons.getChannel().emit(CHANGE, { name, value });
}

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реЗрдЯрдЕрдк рдХреЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рдЫреЛрдбрд╝реЗ рд╣реЛрдВрдЧреЗ:

  • рд╣рдо Storybook рдХреЗ рд╕рд╛рде Vue.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
  • рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдФрд░ рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдХрд╣рд╛рдиреА рд░реИрдкрд┐рдВрдЧ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореИрдВ @IanVS рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реЗрдЯрдЕрдк (рдХреЛрдгреАрдп 7) рдХреЗ рд╕рд╛рде @erickwilder рдХреА рд╣реИрдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЬрдм рднреА рдореИрдВ рдиреЙрдм рд╕реНрдЯреЛрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐

рддреНрд░реБрдЯрд┐: рдХреЛрдгреАрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ!

рдореИрдВрдиреЗ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рдХреЛрдгреАрдп рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ ... рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореИрдВ рдПрдХ рддреАрд╕рд░рд╛ рдШрдЯрдХ рд╕реА рдмрдирд╛рдКрдВрдЧрд╛ рдЬреЛ рдП рдФрд░ рдмреА рдХрд╛ рдПрдХ рдЖрд╡рд░рдг рд╣реЛрдЧрд╛ред

@erickwilder рд╕реЗ рдиреЙрдмреНрд╕ рдПрдбрди рдХреЗ рдкреБрди :

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реА рддрд░рд╣ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛

рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП +1, рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдиреЙрдм рдирд╛рдо рдФрд░ рдПрдХ рдирдпрд╛ рдорд╛рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

import { manager } from "@storybook/addon-knobs"

manager.updateKnob(
  propName, // knobs property, example from above "Checked"
  newValue, // new value to set programmatically, ex. true
)

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рджрд┐рдпрд╛ рдЬрд╛рдПред

рдЗрд╕ рдмреАрдЪ, рд╕реНрдЯреЛрд░реАрдмреБрдХ v5 рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдЗрд╕ рдмреЗрд╣рдж рд╣реИрдХреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рдкрдбрд╝рд╛:

window.__STORYBOOK_ADDONS.channel.emit('storybookjs/knobs/change', {
  name: 'The name of my knob',
  value: 'the_new_value'
})

рдореИрдВ

рдореИрдВ

рд╕рдВрдмрдВрдзрд┐рдд: #6916

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛... рдЦрд╛рд╕рдХрд░ рдХреНрдпреЛрдВрдХрд┐ modals.

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг:

storiesOf('input', module)
  .addDecorator(withKnobs)
  .add('default', () => <input type={text('type', 'text')} value={text('value', '')} disabled={boolean('disabled', false)} placeholder={text('placeholder', '')} onChange={action('onChange')} />)

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдСрдирдЪреЗрдВрдЬ рдЗрд╡реЗрдВрдЯ рдЯрд╛рд░рдЧреЗрдЯ рд╡реИрд▓реНрдпреВ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рддрддреНрд╡ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдорд╛рди рдкрд░ рд╡рд╛рдпрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рддрддреНрд╡ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред

рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛

+1 рд╕реЗ @mathieuk/ @raspo рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рднреА рдЗрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред helpers рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рдмрдирд╛рдирд╛?

import addons from "@storybook/addons";

export const emitter = (type, options) => addons.getChannel().emit(type, options);

export const updateKnob = (name, value) => (
  emitter("storybookjs/knobs/change", { name, value })
);

рдФрд░ рдХрд╣рд╛рдирд┐рдпреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдХреЙрд▓ рдХрд░рдирд╛...

import { text } from "@storybook/addon-knobs";
import { updateKnob } from 'helpers';

// ...
const value = text("value", "Initial value");
<select
  value={value}
  onChange={({ target }) => updateKnob("value", target.value)}
>

... рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдХреБрдЫ рдлрдВрдХреА рдЯреВ-рд╡реЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдиреЙрдмреНрд╕ рдПрдкреАрдЖрдИ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдЙрдкрд░реЛрдХреНрдд рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреА ЁЯСН

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХреНрд░реЙрд╕-рдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдиреЙрдмреНрд╕ рдХреЛ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░рдиреЗ рджреЗрдЧреАред рдПрдХ рдкреГрд╖реНрда рдкрд░ рдЕрдВрдХ рд▓рдЧрд╛рдирд╛ рдШрдЯрдХ рдХрд╣рд╛рдиреА рдмрдирд╛рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдШреБрдВрдбреА рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рджреВрд╕рд░реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрджреНрдпрддрди рд╣реЛ рд╕рдХрддреА рд╣реИ, рддреЛ рдЖрдкрдХреА рдХрд╣рд╛рдиреА рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ:

const resultsCount = number(
    'Results count',
    currentPage, {
        max: 100,
        min: 0,
        range: true
    }
);
const resultsArray: React.ReactNode[] = new Array(resultsCount)
    .fill(true)
    .map((_, idx) => <div key={idx + 1}>Test Pagination Result #{idx + 1}</div>);
const childrenPerPage = 10;
const currentPage = number(
    'Current page index',
    0, {
        max: Math.ceil(resultsCount / childrenPerPage) - 1,
        min: 0,
        range: true
    }
);

рдореИрдВрдиреЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реЗ currentPage рдШреБрдВрдбреА рдкрд░ рдЕрдзрд┐рдХрддрдо рд╕реАрдорд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛрдЧреА рдЬрдм resultsCount 10 рдХреА рд╡реГрджреНрдзрд┐ рдкрд░ рдШреБрдВрдбреА рдмрдврд╝реЗрдЧреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдШреБрдВрдбреА рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рд▓рдЧрддрд╛ рд╣реИ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдХреИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдХреЗ рд░реЗрдВрдбрд░ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдЬрдм рдореИрдВ resultsCount рдХреЛ 10+ рд╕реЗ рдмрдврд╝рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ max currentPage рдореЗрдВ рднреА 1 рдХреА рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд╕рдорд╛рди рд░рд╣рддрд╛ рд╣реИ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( Math.ceil(resultsCount / childrenPerPage) - 1 рд▓реЙрдЧрд┐рдВрдЧ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирдпрд╛ рдорд╛рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ)ред

рд╣рдо рд▓рдЧрднрдЧ 5.3 (рдЬрдирд╡рд░реА рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝) рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ 6.0 (рджреЗрд░ рд╕реЗ рдорд╛рд░реНрдЪ рд░рд┐рд▓реАрдЬрд╝) рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЙрдмреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рдиреЙрдмреНрд╕ рдХреЗ рдореБрджреНрджреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣рд▓ рдХрд░реЗрдЧрд╛ред рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдЖрдкрдХреЗ рдзреИрд░реНрдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@shilman рдореИрдВ рдЗрд╕ рдлреАрдЪрд░ рдХреЛ рд▓реЗрдХрд░ рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВ

рдореИрдВ, @atanasster рдФрд░ @PlayMa256 рдХреБрдЫ рд╕рдордп рд╕реЗ рдЗрд╕рдХреА рдиреАрдВрд╡ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕реЗ рд╕рд╣реА рд╣реЛрдиреЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╣рдо 6.0.0 рдореЗрдВ 100% рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдореЗрдВ рдХреНрд░рд╛рдВрддрд┐ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрд░рд╛рдВрддрд┐? рдЧрд░реНрдо рд▓рд╛рдирдд рдбрд┐рдЧрд┐рдЯреАред рдореБрдЭреЗ рдЪрд┐рдврд╝рд╛рдирд╛ рдмрдВрдж рдХрд░реЛ, рдореЗрд░рд╛ рд╢рд░реАрд░ рддреИрдпрд╛рд░ рд╣реИред

рдореЛрдбрд▓ рдХреЗ рд▓рд┐рдП +1 :)

рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢реБрд░реВ рд╕реЗ рд╣реА рдЕрд╕рдВрднрд╡ рд╣реИред рдЕрдкрдбреЗрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ...

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ!
рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдЕрдЧрд▓реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ:

import { addons } from '@storybook/addons';
import { CHANGE } from '@storybook/addon-knobs';

const channel = addons.getChannel();

channel.emit(CHANGE, {
  name: 'prop_name',
  value: prop_value,
});

рдЕрднреА рднреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рдПрдЧреАред

рдореИрдВрдиреЗ рдЕрд╡рд▓реЛрдХрдиреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рдореИрдВ рдХреЛрдгреАрдп рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

`
.add ('рдЪрд╛рд░реНрдЯ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛', () => {

const myObservable= new BehaviorSubject([{a: 'a', b: 'b'}]);
return {
  template: '
  <my-component
    myInput: myData,
    (myEvent)="myEventProp($event)"
  ></my-component>
  ',
  props: {
    myData: myObservable,
    myEventProp: $event => {
      myObservable.next([]);
      action('(myEvent)')($event);
    }
  }
};

})
`

@ рдиреЙрд░рдмрд░реНрдЯ-рдбреВрдлрд╕ рдзрдиреНрдпрд╡рд╛рдж рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдиреЗ рдореЗрд░реА рдорджрдж рдХреА

рд╣рд╛рдп рдЧреИрдВрдЧ, рд╣рдордиреЗ рдЕрднреА-рдЕрднреА 6.0-рдмреАрдЯрд╛ рдореЗрдВ рдПрдбрдСрди-рдХрдВрдЯреНрд░реЛрд▓ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ!

рдирд┐рдпрдВрддреНрд░рдг рдкреЛрд░реНрдЯреЗрдмрд▓, рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯреЗрдб рдиреЙрдмреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдбрдСрди-рдиреЙрдмреНрд╕ рд▓реЙрдиреНрдЧ рдЯрд░реНрдо рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрддрд╛ рд╣реИред

рдХреГрдкрдпрд╛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ рдФрд░ рдЖрдЬ рд╣реА рдЗрдиреНрд╣реЗрдВ рдЖрдЬрд╝рдорд╛рдПрдВ. рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдФрд░ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдПрдХ рджрдо рдмрдврд╝рд┐рдпрд╛! рдореИрдВ рд░реАрдбрдореЗ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛), рдХреНрдпрд╛ рдЗрди рдирдП controls рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛?

рд╡реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдПрдбрдСрди-рдбреЙрдХреНрд╕ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдареАрдХ рд╡рд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рдореИрдВ @tmeasday рдХреЗ рд╕рд╛рде рдХрд╛рдо

  • [ ] рдХрд╣рд╛рдиреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ updateArgs рдЬреЛрдбрд╝реЗрдВ?
  • [ ] рдХрд╣рд╛рдиреА рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЙрд╕ рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдВ рдЬрд┐рд╕реЗ рдХрд╣рд╛рдиреА рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ? ( this.context?.updateArgs(....) )

рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЬреЛ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдПрдХ рддрд╛рдЬрд╛ рд╕реАрдЖрд░рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдбреЗрдореЛ рддрдХ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджрд╛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдкреВрд░реНрд╡рд╛рднреНрдпрд╛рд╕ рдмрдирд╛рдпрд╛ рд╣реИред рдЗрд╕рдХреА рдЬрд╛рдВрдЪ - рдкрдбрд╝рддрд╛рд▓ рдХрд░реЗрдВ:

=> рд╕реНрдЯреЛрд░реАрдмреБрдХ рдирд┐рдпрдВрддреНрд░рдг w / CRA рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ

рдирд┐рдпрдВрддреНрд░рдг рд░реАрдбрдореЗ рдореЗрдВ рдХреБрдЫ "рдиреЙрдмреНрд╕ рдЯреВ рдХрдВрдЯреНрд░реЛрд▓" рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдбреЙрдХреНрд╕ рднреА рд╣реИрдВ:

=> рдореИрдВ рдРрдбрдСрди-рдиреЙрдмреНрд╕ рд╕реЗ рдХреИрд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реВрдВ?

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ!
рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдЕрдЧрд▓реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ:

import { addons } from '@storybook/addons';
import { CHANGE } from '@storybook/addon-knobs';

const channel = addons.getChannel();

channel.emit(CHANGE, {
  name: 'prop_name',
  value: prop_value,
});

рдЕрднреА рднреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рдПрдЧреАред

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ groupId рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рд╕рдореВрд╣ рдЖрдИрдбреА рдХреЛ name рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

 const show = boolean('Show Something', true, 'Group')

channel.emit(CHANGE, {
  name: 'Show Something_Group',
  value: prop_value,
});

рд╕рд╛рде рд╣реА, channel рдПрдХ EventEmitter рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП addListener рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВред

channel.addListener(CHANGE, console.log)

рдпрд╣рд╛рдВ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ рдЬреЛ v6 рдореЗрдВ addon-controls рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИред

import { useArgs } from '@storybook/client-api';

// Inside a story
export const Basic = ({ label, counter }) => {
    const [args, updateArgs] = useArgs();
    return <Button onClick={() => updateArgs({ counter: counter+1 })>{label}: {counter}<Button>;
}

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдПрдкреАрдЖрдИ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЛрдиреЛрд░реЗрдкреЛ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг:

https://github.com/storybookjs/storybook/blob/next/examples/official-storybook/stories/core/args.stories.js#L34 -L43

рдзрдиреНрдпрд╡рд╛рдж, @shilman! рдпрд╣реА рдЪрд╛рд▓ рдЪрд▓реАред

рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдЯреАрдХ Checkbox рдХрд╣рд╛рдиреА checked рдкреНрд░реЛрдк рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕ рдкреВрд░реЗ рдзрд╛рдЧреЗ рдХреЛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред Storybook 6.0.0-rc.9 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реА рдирдИ рд╡рд╛рдпрд░реНрдб рдХрд╣рд╛рдиреА рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╣реИ:

export const checkbox = (args) => {
  const [{ checked }, updateArgs] = useArgs();
  const toggleChecked = () => updateArgs({ checked: !checked });
  return <Checkbox {...args} onChange={toggleChecked} />;
};
checkbox.args = {
  checked: false,
  label: 'hello checkbox!',
};
checkbox.argTypes = {
  checked: { control: 'boolean' },
};

cb-arg

@shilman рдореИрдВрдиреЗ рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╣рд╛рдиреА рдореЗрдВ useArgs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ (рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рдЬрд╣рд╛рдВ рд╣рдо рдЖрдорддреМрд░ рдкрд░ useState рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрдЯрдХ рдХреЗ value рдкреНрд░реЛрдк рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рдХреА onChange рдШрдЯрдирд╛)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬрд╣рд╛рдВ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдЪрд░рд┐рддреНрд░ рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реИ, рддреЛ рдШрдЯрдХ рдлреЛрдХрд╕ рдЦреЛ рджреЗрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╢рд╛рдпрдж рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рддрд░реНрдХ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХрд╣рд╛рдиреА рдХреЛ рд░реАрдлреНрд░реЗрд╢/рдкреБрдирдГ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ?

рдХреНрдпрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ/рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрд▓рдЧ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╡рд┐рдзрд┐ рд╣реИ?

рдпрд╣ 6.0.0-rc.13 . рдХреЗ рд╕рд╛рде рдерд╛

@jcq рдХреНрдпрд╛ рдЖрдк useArgs рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдорд░реНрдерди рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

@shilman рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ - рдпрд╣рд╛рдБ рдирдпрд╛ рдореБрджреНрджрд╛ рд╣реИ:
https://github.com/storybookjs/storybook/issues/11657

рдореБрдЭреЗ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ рдХрд┐ рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдбреЙрдХреНрд╕ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдХреИрдирд╡рд╛рд╕ рдореЛрдб рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЕрд╡рд▓реЛрдХрдиреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рдореИрдВ рдХреЛрдгреАрдп рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

`
.add ('рдЪрд╛рд░реНрдЯ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛', () => {

const myObservable= new BehaviorSubject([{a: 'a', b: 'b'}]);
return {
  template: '
  <my-component
    myInput: myData,
    (myEvent)="myEventProp($event)"
  ></my-component>
  ',
  props: {
    myData: myObservable,
    myEventProp: $event => {
      myObservable.next([]);
      action('(myEvent)')($event);
    }
  }
};

})
`

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рд▓рд╛рдЗрди 5 . рдкрд░ myData.value рдмрджрд▓ рджрд┐рдпрд╛

рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдпрд╛ рдирд╣реАрдВ рд╣реИ (рдЕрднреА рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЕрдЯрдХрд╛ рд╣реБрдЖ рд╣реИ) рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдм рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрд░реНрдХ/рдирд┐рдпрдВрддреНрд░рдг рдкрд░ рдорд╣рд╛рди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Jonovono picture Jonovono  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arunoda picture arunoda  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

xogeny picture xogeny  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

purplecones picture purplecones  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

oriSomething picture oriSomething  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ