Ant-design: `Antd` рдХреЗ рдШрдЯрдХреЛрдВ рдХреА рд╕реВрдЪреА рдЬреЛ HOC рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдлрд╝рд░ре░ 2017  ┬╖  65рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ant-design/ant-design

рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • Menu Menu.SubMenu Menu.MenuItem , рдХреАрдмреЛрд░реНрдб рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд▓рдкреЗрдЯрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ instance.onKeyDown https://github.com/ant-design/ant-design/issues рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ
  • Table.Column , Table children[n].props рдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝реЗрдВрдЧреЗ рдФрд░ рдпрд╣ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ рдЕрдм https://github.com/ant-design/ant-design/issues / 4029 https://github.com/ant-design/ant-design/issues/4324
  • Collpase.Panel , Collapse children[n].header рд╢реАрд░реНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝реЗрдВрдЧреЗред
  • Tabs.TabPane , Tabs TabBar рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП children[n].tab рдкрдврд╝реЗрдВрдЧреЗред https://github.com/ant-design/ant-design/issues/5165
  • Select.Option , Select key рд╡рд┐рдХрд▓реНрдк рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
  • Descriptions.Item https://github.com/ant-design/ant-design/issues/27411
Inactive тЭУFAQ ЁЯЧг Discussion

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

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЙрдХреНрд╕ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рдмрдЧ рдкрд░ рд╢реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрджрд┐рд╡рд╕ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░ рджрд┐рдпрд╛, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрд░реЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИред рдХреГрдкрдпрд╛ рдХреГрдкрдпрд╛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ, рддрд╛рдХрд┐ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрддрдирд╛ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░рдирд╛ рдкрдбрд╝реЗ рдХрд┐ рдЖрдк рдПрдХ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХреЗрдВ, рд░рд┐рдПрдХреНрдЯ рдХреАрдЬрд╝ рдкрд░ рд░рд┐рд▓реЗрдпрд┐рдВрдЧ рдХрд░ рд╕рдХреЗрдВ, рдФрд░ рдЕрдм рдЖрдк рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрдИ рдПрдЪрдУрд╕реА рдпрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдирд╛рдЬреБрдХ рд╣реИрдВред
рдпрд╣ рд╡рд╛рдХрдИ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЕрдЧрд▓реЗ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдареАрдХ рдХрд░ рд▓реЗрдВрдЧреЗред

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

рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреБрдЫ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ key рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рддрдм рддрдХ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрдм рддрдХ рд╣рдо рд╕рднреА рдПрдкреАрдЖрдИ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд▓реЗрддреЗред рдЬреИрд╕реЗ

key => id
expandedKeys => expandedIds
selectedKeys => selectedIds
....

рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рдХреЛ atd-codemod рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рддреЛ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдпреЛрдЧреНрдп рд╣реИ?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рдХреЛрдбрдореЙрдб рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВред
рдмрд╕ рдореЗрд░реА рдмрд╛рдд, рд▓реЗрдХрд┐рди, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡рд╛рдЧрдд рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдХрд╛рд░рдХ рд╣реИред

рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдореЗрдВ рдПрдВрдмреЗрдбрд┐рдВрдЧ рдШрдЯрдХ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдПрдХ рдЖрдо рдмрд╛рдд рд╣реИред

рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╣ рдХреЗ рдПрдВрдЯ-рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рд╛рдПрдВред

рдЪреАрдВрдЯреА рдбрд┐рдЬрд╛рдЗрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдХрд░реНрд╖рдХ рд╣реИ рдФрд░ рдпрд╣ рдкрд╣рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

@MacKentoch

рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреБрдЫ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╣рдо рдЗрд╕реЗ рддрдм рддрдХ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрдм рддрдХ рд╣рдо рдПрдкреАрдЖрдИ рдХреЗ рд╕рднреА рдирд╛рдореЛрдВ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд▓реЗрддреЗред

@ afc163 рдЕрдЧрд░ рд╣рдо рдЙрди рдПрдкреАрдЖрдИ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд▓реЗрдХрд┐рди рд╣рдо рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдХрд╛рдо рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджреЗрдЦреЗрдВ: https://github.com/react-component/collapse/issues/73#issuecomment -323626120

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП?

@benjycui рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред

рд╡реИрд╕реЗ рднреА, рдпрд╣ рд╕рдм рдХреЗ рдмрд╛рдж рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИред

рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@benjycui рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЬрдм рдЖрдк рдПрдХ рдШрдЯрдХ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдИ рдЫреЛрдЯреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдо рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдХреЛрдб рдХреЛ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рдЕрдВрджрд░ рдмрд╣реБрдд рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ред рдпрджрд┐ рдЖрд╡реЗрджрди рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ atd рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рди рдЕрдкрдирд╛рдКрдВ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдХ рдорд╛рдиреЗрдВред
рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

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

рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП v3 рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреЗрдВред

рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рдж рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╢рд╛рдпрдж)ред

рдЗрд╕ рдХреЛрд╢рд┐рд╢ рдХрд░ рдореЗрдВ рд╕рд┐рд░реНрдл рднрд╛рдЧ рдЧрдпрд╛ (рдЦреЗрдж рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЧрд▓рдд рд╣реИ) рдореЗрдиреВ рдирд╣реАрдВ рдорд┐рд▓ рдкрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░реВрдЯрд░ рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП <Link /> рдХреЗ рд╕рд╛рде рдореЗрдиреВ рдореЗрдВ рдЯреИрдЧ <Icon /> ред

рдХреНрдпрд╛ рдЕрдзрд┐рдХ рдкрд╕рдВрджреАрджрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ?

IMHO, рдпрд╣ рдереНрд░реЗрдб рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХреНрд╕ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреАрд▓рдмреНрд░реЗрдХрд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
рдбреЙрдХреНрд╕ рдХреЛ https://github.com/react-component/collapse/issues/73#issuecomment -323626120 рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рдХреЛрдИ рд░рд╛рдЬреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рд╣реЛрдЧреА! рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдХрд╛рдлреА рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

<Collapse>
   <MyCollapseItem />
   <MyCollapseItem2 />
</Collapse>

рдЬрд╣рд╛рдБ MyCollapseItem рдФрд░ MyCollapseItem2 Collapse.Panel рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдм рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 16 рдЖрдкрдХреЛ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд░реЗрдВрдбрд░ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб рдХреЛ рд░реЛрдХрдирд╛ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реИред

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

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

рдпрд╣рд╛рдБ рднреА - рдореБрдЭреЗ Tabs.TabPane рдФрд░ Menu.MenuItem ред

рдореБрдЭреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдк рдХреЗ рд╕рд╛рде рд╕рд╣рд╛рд░рд╛ рдХреЗ рдмрд╛рдХреА рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓ рдорд┐рд▓рд╛ рд▓рд┐рдкрдЯреЗ рдШрдЯрдХ рд╕реЗред

рдпрджрд┐ рдЖрдк React.Children.map(children, (child, index) => { ... }) рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдПред рдЕрдВрдд рдореЗрдВ, рдкреНрд░рдореБрдЦ рд╕рдВрдкрддреНрддрд┐ рдХреЛ mykey/.0 рдЬреИрд╕рд╛ рдореВрд▓реНрдп рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдореИрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореИрдВ рднреА рдЧреБрдгреЛрдВ рдкрд░ рдПрдХ рдирд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд░реВрдВрдЧрд╛ред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ atd рд╕реЗ рджреВрд░ рдХрд░ рд╕рдХрддреА рд╣реИ ... рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдЗрди рдШрдЯрдХреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрдкрдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред

рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдиреВ рдХреЗ рднреАрддрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░реВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред Item @yunshuipiao рдиреЗ рдПрдХ рд╕рдлрд▓ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП #

рдПрдХ рдФрд░ рдЫреЛрдЯрд╛ рдореБрджреНрджрд╛: рдореЗрдиреНрдпреВ рдХреЛ рд▓рдкреЗрдЯрдирд╛ред рдпрд╣ рд╕рдмрдореЗрдиреВ рдХреЛ рддрдм рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдЬрдм рдЙрд╕рдХреЗ рдХрд┐рд╕реА рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдореЛрдб рдореЗрдВред рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд░реЗрдЦрд╛рдПрдБ:

https://github.com/react-component/menu/blob/018d6f84d622ee140d9695ba57e7a773cf368efa/src/util.js#L40
https://github.com/react-component/menu/blob/018d6f84d622ee140d9695ba57e7a773cf368efa/src/SubMenu.jsx#L314

рдереЙрдЯ рдЖрдИрд▓реНрдб рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдПрдХ рдХрд╕реНрдЯрдо рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рдЗрд╕реА рддрд░рд╣ @jfreixa рдиреЗ рдЬреЛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдмрд╕ рдХрд╕реНрдЯрдо рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рджрд┐рдП рдЧрдП рд╕рднреА рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдкреИрдирд▓, рдЬреИрд╕реЗ

<Collapse>
  <Custom/>
  <Custom/>
</Collapse>


Custom.render() {
  return (
    <Panel {...this.props}>
      <div>My custom stuff here</div>
    </Panel>
  )
}

@Ncknuna рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╣реА рдореБрджреНрджрд╛ред

рд▓рд┐рдкрдЯреЗ рд╣реЛрдиреЗ рдкрд░ Menu.Item рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдХрд╛рдо рд╣реИ?

@Nomeyho рдореИрдВрдиреЗ рддрд░реНрдХ рдХреЛ рд╕рдорд╛рдкреНтАНрдд рдХрд░рддреЗ рд╣реБрдП рд╕рдорд╛рдкреНтАНрдд рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрдкреА / рдкреЗрд╕реНрдЯ рдХрд░рдХреЗ ant-menu-submenu-selected рдХреНтАНрд▓рд╛рд╕ рдорд┐рд▓рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдореВрд▓ рдЪреЗрдХ рдХреА рдЯрд┐рдкреНтАНрдкрдгреА рдХрд░рддреЗ рд╣реБрдП, рддрдм рдореЗрд░реЗ рд░реИрдкрд░ рдореЗрдВ className рд░реВрдк рдореЗрдВ рдХрдХреНрд╖рд╛ рдкрд╛рд╕ рдХрд░рдирд╛:

function loopMenuItemRecusively (children: Array<any>, keys: Array<string>, ret: { find: boolean }) {
  if (!children || ret.find) {
    return
  }
  React.Children.forEach(children, (c: any) => {
    if (ret.find) {
      return
    }
    if (c) {
      const construt = c.type
      // Original check that caused problems. I'm not concerned about omitting it
      // because I don't plan on putting a bunch of weird, large stuff in my menus...
      // if (!construt || !(construt.isSubMenu || construt.isMenuItem || construt.isMenuItemGroup)) {
      //   return;
      // }
      if (keys.indexOf(c.key) !== -1) {
        ret.find = true
      } else if (c.props && c.props.children) {
        loopMenuItemRecusively(c.props.children, keys, ret)
      }
    }
  })
}

function isChildrenSelected (children: Array<any>, selectedKeys: Array<string>) {
  const ret = { find: false }
  loopMenuItemRecusively(children, selectedKeys, ret)
  return ret.find
}

// Omitting other custom code below...
export const SubMenu = ({ children, className, selectedKeys, title, ...rest }: any) => {
  const isSelected = isChildrenSelected(children, selectedKeys)
  className = [
    className,
    isSelected ? 'ant-menu-submenu-selected' : ''
  ].filter(className => classname).join(' ')
  return (
    <SubMenu title={title} className={className} selectedKeys={selectedKeys} {...rest}>
      {children}
    </SubMenu>
  )
}

рдХреНрдпрд╛ рдЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╣рд▓ рд╣реИ?

рдореИрдВ @ChuckJonas рд╕реЗ рд╕рд╣рдордд

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ atd рд╕реЗ рджреВрд░ рдХрд░ рд╕рдХрддреА рд╣реИ ... рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдЗрди рдШрдЯрдХреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрдкрдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдореЗрдиреВ SubMenu рдФрд░ Menu.items рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдиреНрдп рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдЕрдкрдиреЗ "CustomSubMenu" рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ ... рдпрд╣ "рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп" рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

_MainFile.js_

Import CustomSubMenu from './OtherFile.js';

<Menu>
    <CustomSubMenu />
    <CustomSubMenu2 />
    <CustomSubMenu3 />
</Menu>

рдФрд░ OtherFile.js рдЗрд╕ рддрд░рд╣:

render(){
 return(
     <SubMenu>
           <SubMenu.item />
           <SubMenu.item2 />
            etc...etc...
     </SubMenu>
 );
}

рд╕рдмрдореЗрдирд╕ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб (рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд):

const SubMenuArray = ({ ...props }) =>
  [1, 2].map(i => (
    <Menu.SubMenu {...props} eventKey={`item_${i}`} subMenuKey={`${i}-menu-`} />
  ));

рдЬрдм рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо:

  • рдиреАрдЪреЗ рд╕рд╣рд╛рд░рд╛ рдЧреБрдЬрд░рддрд╛ рд╣реИ
  • eventKey рдФрд░ subMenuKey , рдЬреЛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдПрдХ рдмреЗрд╣рддрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╢рд╛рдпрдж рд╣реЛрдЧрд╛:

const SubMenuWrapper = ({ children, ...props }) =>
  React.Children.map(children, (child, i) =>
    React.cloneElement(child, {
      ...props,
      eventKey: `item_${i}`,
      subMenuKey: `${i}-menu-`
    })
  );

рдЙрдкрдпреЛрдЧ:

      <Menu>
        <SubMenuWrapper>
          <CustomSubMenu title={"one"}/>
          <CustomSubMenu title={"two"}/>
        </SubMenuWrapper>
      </Menu>

рдлрд┐рд░, рдЖрдк рд╕рдВрднрд╡рддрдГ рд╕рд░рдгреА рдореЗрдВ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рдареЛрд╕ рд╣реИред

  • рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдореЗрдВ antd рдШрдЯрдХреЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП 1ред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрдирд╛ рдпрд╛ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдВрдЬреА рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдореЗрдиреВ рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВ, рд╣рдо itemKey рдкреНрд░реЛрдк рдХрд╛ рдкрд░рд┐рдЪрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдореЗрдиреВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП context рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрдиреВ рдЕрднреА рднреА рдмрдЪреНрдЪреЛрдВ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ key рд╕реЗ itemKey рдмрджрд▓рддреЗ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рд╣рдо selectedKeys рдЬреИрд╕реЗ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рднреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

@yesmeck рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝реА рджреЗрд░ рдмрдирд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ ant design рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ ( рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рднреАрддрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ )ред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирдП context API рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╡рд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ

рд╣рд╛рдВ, рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП context рдмрдЬрд╛рдп cloneElement рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╛рдзрд╛рди "React.Children.forEach" рдФрд░ "React.cloneElement" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рд░рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдирдП рд╕рд╣рд╛рд░рд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо:

<Select>
  {({ onSelect }) => (
    <div>
      <Option onClick={onSelect} key="0">option1</Option>
      <Option onClick={onSelect} key="1">option2</Option>
    </div>
  )
</Select>

рдФрд░ atd рдЪреБрдирд┐рдВрджрд╛ рд╕реНрд░реЛрдд рднреА "React.Children.forEach" рдФрд░ "React.cloneElement" рдХреЗ рдмрдЬрд╛рдп рдлрд╝рдВрдХреНрд╢рди рдмрдЪреНрдЪреЛрдВ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдорд╛рдл рдХрд░рдирд╛ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдмреЗрд╡рдХреВрдл рд╕рд╡рд╛рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рд░рд┐рдПрдХреНрдЯ рдФрд░ рдЪреАрдВрдЯреА рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдирдпрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╣рдо рдХрд┐рд╕реА рдЕрднрд┐рдХреНрд░рд┐рдпрд╛-рд░рд┐рдбреНрдпреВрдХ рдПрд╕рдкреАрдП рд╕реЗ рдЬреБрдбрд╝реЗ рдПрдВрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдиреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЖрдк рдЪреАрдВрдЯреА рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЬрдЯрд┐рд▓ рдПрд╕рдкреАрдП рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдХрд╛рдо рд╣реИ?

рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди?

рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ? рдореЗрдиреВ рдЖрдЗрдЯрдо HOC рдХреЗ рд╕рд╛рде рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдирдорд╕реНрддреЗ ! рдпрд╣рд╛рдБ рднреА, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╕реНрдЯрдо Select.Option

рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рд╕реА рднреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдиреЗ рдореБрдЭреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХреА, рдореЗрд░реЗ рдкрд╛рд╕ рдЦрд╛рд▓реА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЪрдпрди рд╣реИ ...ред

import React from 'react';
import PropTypes from 'prop-types';
import { Select } from 'antd';

const { Option } = Select;

const PictureOption = ({ label, value, pictureId, ...props }) => (
    <Option label={label} value={value} className="select-item" {...props}>
        <div className="select-item__thumbnail">
            <img src={pictureId} alt="item-img" />
        </div>
        <div className="select-item__name">{label}</div>
    </Option>
);

PictureOption.propTypes = {
    label: PropTypes.string.isRequired,
    value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
    pictureId: PropTypes.string.isRequired,
};

export default PictureOption;

рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ UI рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CASL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдХрд┐ рд╕рдмрдореЗрдирд╕ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ isRootMenu рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЙрдкреНрд╕ рдмрд╛рд▓ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВрдиреЗ рд╕рдмрдореЗрдирд╕ рдХреЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдФрд░ 'рд╣рд╛рде рд╕реЗ рд╕рд╣рд╛рд░рд╛' рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред
`` ``
рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛() {

// ### Administration Menu ###
const AdminMenu = ({ ...props }) => {
  return (
    <Can I="access" on="admin-content">
      <Menu.Divider {...props} />
      <Menu.SubMenu
        {...props}
        title={
          // FIXME: Icon is not rendered... :-/
          <span>
            <Icon type="tools" />
            <span>Administration</span>
          </span>
        }
        // title={<span>Administration</span>}
        key="admin">
        <Menu.Item key="users" tabIndex={0}>
          <Icon type="android" />
          <span>User Administration</span>
        </Menu.Item>
        <Menu.Item key="permissions" tabIndex={0}>
          <Icon type="lock" />
          <span>Permissions</span>
        </Menu.Item>
      </Menu.SubMenu>
    </Can>
  );
};

return (
  <Layout id="menu-component-layout">
    <Layout.Sider width="300px" collapsible="false" trigger={null}>
      <Menu theme="dark" mode="inline" defaultSelectedKeys={['user']} defaultOpenKeys={['user', 'config', 'admin']}>
        <AdminMenu />
      </Menu>
    </Layout.Sider>
    <Layout.Content id="menu-component-content">
      <h3>Page containing a side menu</h3>
    </Layout.Content>
  </Layout>
);

}
`` ``

рдпрд╣ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рд╕рдмрдореЗрдиреВ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЖрдЗрдХрди рд╢рд╛рдорд┐рд▓ рд╣реИ, рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдХрди рдЧрд╛рдпрдм рд╣реИред

рдХрд┐рд╕реА рдХреЛ рднреА рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?

рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдПрдХ рд╢реЛрдХреЗрд╕ рдмрдирд╛рдпрд╛: https://github.com/gibelium/meteor-react-antd-casl

GitHub
рдПрдХ рдЙрд▓реНрдХрд╛ / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ CASL рдкреНрд░рд╛рдзрд┐рдХрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди

@ Gibelium рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЗрдХрди рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рд╣рдХрджрд╛рд░ рд╣реИрдВред рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд░реЗрдкреЛ рдкрд░ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдФрд░ рдЖрдЗрдХрди рдХреЛ рднреВрдд рдмрдЯрди рд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдмрдЯрди рдХреА рд░реВрдкрд░реЗрдЦрд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдХрди рдмрдЯрди рдореЗрдВ / рдкрд░ рд░реЗрдВрдбрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ...

@gotjoshua рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рд╕рдорд░реНрдкрд┐рдд рдореБрджреНрджреЗ рдХреЛ рдмрдирд╛рдПрдВрдЧреЗ?

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдореЗрдиреВ рдЖрдЗрдЯрдо рд╕реЗрдЯ рдХрд░рдирд╛ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдиреВ рдХреЗ defaultOpenKeys рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЙрдХреНрд╕ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рдмрдЧ рдкрд░ рд╢реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрджрд┐рд╡рд╕ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░ рджрд┐рдпрд╛, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрд░реЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИред рдХреГрдкрдпрд╛ рдХреГрдкрдпрд╛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ, рддрд╛рдХрд┐ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрддрдирд╛ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░рдирд╛ рдкрдбрд╝реЗ рдХрд┐ рдЖрдк рдПрдХ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХреЗрдВ, рд░рд┐рдПрдХреНрдЯ рдХреАрдЬрд╝ рдкрд░ рд░рд┐рд▓реЗрдпрд┐рдВрдЧ рдХрд░ рд╕рдХреЗрдВ, рдФрд░ рдЕрдм рдЖрдк рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрдИ рдПрдЪрдУрд╕реА рдпрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдирд╛рдЬреБрдХ рд╣реИрдВред
рдпрд╣ рд╡рд╛рдХрдИ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЕрдЧрд▓реЗ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдареАрдХ рдХрд░ рд▓реЗрдВрдЧреЗред

рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ? рд╕реЗрдЯ рдореЗрдиреВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреБрдЫ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред ЁЯФе

рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рдореИрдВ (рд╢рд╛рдпрдж) рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред
рдореИрдВ Redux рдХрдиреЗрдХреНрдЯреЗрдб рдШрдЯрдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ Redux рд╕реНрдЯреЛрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде Select рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╣рд░ рдЬрдЧрд╣ рдПрдХ рд╣реА рдХреЛрдб "рдХреЙрдкреА-рдкреЗрд╕реНрдЯ" рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдореИрдВ Form.getFieldDecorator рдЕрдВрджрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди connect HOC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред рдпрд╣ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ред рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ forwardRef рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрд┐рдд рд╣реИ:
connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true })(Component);
рдпрд╣ рд╕рдорд╛рдзрд╛рди connect HOC рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ React.foradref рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рди рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд░рд▓ рдФрд░ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдорд╛рдзрд╛рди рд╣реИ?

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрджреНрдпрддрди рдХреГрдкрдпрд╛?

рдореБрдЭреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдк рдХреЗ рд╕рд╛рде рд╕рд╣рд╛рд░рд╛ рдХреЗ рдмрд╛рдХреА рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓ рдорд┐рд▓рд╛ рд▓рд┐рдкрдЯреЗ рдШрдЯрдХ рд╕реЗред

рдпрд╣ рдХрдВрд╕реЛрд▓ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп index.js:1437 Warning: React does not recognize the staticContext prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase staticcontext`ред рдпрджрд┐ рдЖрдкрдиреЗ рдЧрд▓рддреА рд╕реЗ рдЗрд╕реЗ рдореВрд▓ рдШрдЯрдХ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ DOM рддрддреНрд╡ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред

index.js: 1437 рдЪреЗрддрд╛рд╡рдиреА: рдкреНрд░реЛрдк dispatch рд▓рд┐рдП рдЕрдорд╛рдиреНрдп рдорд╛рди

  • рдЯреИрдЧред рдпрд╛ рддреЛ рдЗрд╕реЗ рддрддреНрд╡ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ, рдпрд╛ рдЗрд╕реЗ DOM рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рд╕рдВрдЦреНрдпрд╛ рдорд╛рди рдкрд╛рд╕ рдХрд░реЗрдВред рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, https://fb.me/react-attribute-behavior рджреЗрдЦреЗрдВ
    рд▓реА рдореЗрдВ (MenuItem рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ)
    MenuItem рдореЗрдВ (рдХрдиреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ (MenuItem))
    рдХрдиреЗрдХреНрдЯ рдореЗрдВ (MenuItem) (Context.Consumer рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛)
    рдЯреНрд░рд┐рдЧрд░ рдореЗрдВ (рдЯреВрд▓рдЯрд┐рдк рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд)
    рдЯреВрд▓рдЯрд┐рдк рдореЗрдВ (Context.Consumer рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд)
    рдЯреВрд▓рдЯрд┐рдк рдореЗрдВ (Context.Consumer рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд)
    MenuItem рдореЗрдВ (FortKnox.js рдкрд░: 55)
    in _FortKnox (ConnectFunction рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд)
    рдХрдиреЗрдХреНрдЯрдлрдВрдХреНрд╢рди рдореЗрдВ (Context.Consumer рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд)
    withRouter (рдХрдиреЗрдХреНрдЯ (_FortKnox)) (PageSider / index.js рдкрд░: 114)
    рдЙрд▓ рдореЗрдВ (DOMWrap рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ)
    DOMWrap рдореЗрдВ (SubPopupMenu рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд)
    SubPopupMenu рдореЗрдВ (Connect (SubPopupMenu рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд))
    рдХрдиреЗрдХреНрдЯ рдореЗрдВ (SubPopupMenu) (рдореЗрдиреВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛)
    рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ (рдореЗрдиреВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛)
    `
  • рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ ... рдореИрдВ Menu.Item рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП HOC рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрдиреБрдорддрд┐ рдШрдЯрдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди atd рдпрд╣ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ ... рджреБрдЦрдж

    рдореИрдВрдиреЗ рдЙрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ ...

    рдФрд░ рдпрд╣ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдмрд╛рдХреА рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрддрдиред рдкреИрдирд▓ (рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рд╕реА-рдкреИрдирд▓ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЬрд╛рдВрдЪреЗрдВ)

    export const CustomPanel: React.FC = ({ header, children, ...props }) => {
      // do whatever you like
    
      return <Collapse.Panel header={header} {...props}>
        {children}
      </Collapse.Panel>
    };
    

    рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

    <Collapse>
        <CustomPanel key="first" header="Header 1">Body</CustomPanel>
        <CustomPanel key="second" header="Header 2">Body</CustomPanel>
    </Collapse>
    

    4.0 рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛!

    рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред
    рд╡рд╕реНрддреБрддрдГ рдЙрди рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдиреБрдкрдпреЛрдЧреА рдмрдирд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдХрднреА-рдХрднреА рд╕рд░рд▓ рднреА рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг)ред
    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рднрд░реА рд╣реБрдИ рдореЗрдиреВ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдЪрдореБрдЪ рд╕реНрдкрд┐рдирд░ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп Menu.Item рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдЖрддрд╛ред
    рдпрд╣ рдЗрд╖реНрдЯрддрдо рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред

    рдореИрдВрдиреЗ рдЙрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ ...

    рдФрд░ рдпрд╣ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдмрд╛рдХреА рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрддрдиред рдкреИрдирд▓ (рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рд╕реА-рдкреИрдирд▓ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЬрд╛рдВрдЪреЗрдВ)

    рдЬрдмрдХрд┐ рдпрд╣ рдПрдХ рдорд╣рд╛рди рд╕рдорд╛рдзрд╛рди рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ! рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ) рдЖрдк рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред
    Ie рдпрджрд┐ рдЖрдкрдХрд╛ <SubMenu> <Menu> рдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдмрдЪреНрдЪрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ defaultOpenKeys рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред ЁЯШЮ

    рдмрд╕ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ FYI рдХрд░реЗрдВред

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

    рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдХреЛрдИ рддрдп рдирд╣реАрдВ рд╣реИред

    рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рди рдХреЗрд╡рд▓ рдмреЙрдХреНрд╕ рд╕реЗ рд╕реАрдзреЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП рдПрдкреАрдЖрдИ рдХреЛ рдЬреЛрдбрд╝ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдПрдЪрдУрд╕реА рдХреЗ рдЧреИрд░-рд╕рд╛рдорд╛рдиреНрдп рдпрд╛ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ред рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП рдореМрд▓рд┐рдХ рд╣реИред

    рдХреГрдкрдпрд╛, рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕рдХреЗ рдареАрдХ рд╣реЛрдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдкрдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХреНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рднреА рдорд┐рд▓реЗрдВрдЧреЗред

    рдХреГрдкрдпрд╛, рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕рдХреЗ рдареАрдХ рд╣реЛрдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдкрдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХреНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рднреА рдорд┐рд▓реЗрдВрдЧреЗред

    рд░рдЦрд░рдЦрд╛рд╡ рдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реИрдВ, рдЖрдк рдбреЙрдХреНрд╕ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рднреА рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

    @ afc163

    рдореИрдВрдиреЗ рдЙрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ ...

    рдФрд░ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдЖрд░рд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрд╛рдиреА рдХреЛ рд╕рд╣рд╛рд░рд╛ред рдкрддрдиред рдкреИрдирд▓ (рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рд╕реА-рдкреИрдирд▓ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЬрд╛рдВрдЪреЗрдВ)

    export const CustomPanel: React.FC = ({ header, children, ...props }) => {
      // do whatever you like
    
      return <Collapse.Panel header={header} {...props}>
        {children}
      </Collapse.Panel>
    };
    

    рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

    <Collapse>
        <CustomPanel key="first" header="Header 1">Body</CustomPanel>
        <CustomPanel key="second" header="Header 2">Body</CustomPanel>
    </Collapse>
    

    рдХреНрдпрд╛ рдХреЛрдИ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдиреАрдЪреЗ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ Panel рд▓рдкреЗрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред

    рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

     <PersonalInfoPanel
                    header="header"
                    key={"personalInfo" + i}
                    extra={genExtra()}
                />
    

    PersonalInfoPanel рдЕрдВрджрд░:

    function PersonalInfoPanel(props, ref) {
        return (
            <Panel header={props.header} key={props.key} extra={props.extra}>
    ...
    

    рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

    рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

    function PersonalInfoPanel(props, ref) {
        return (
            <Panel {...props}>
    ...
    

    рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
    рдХреЛрдИ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВ?

     <Panel {...props}>
    ...
    

    рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред

    рдХреЛрдИ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВ?

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

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

    рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
    MANY (рдпрд╛ .. рд▓рдЧрднрдЧ) рдбреЗрд╡рд▓рдкрд░ рдХрд╕реНрдЯрдо рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

    рдЙрджрд╛рд╣рд░рдг)
    рдпрд╣ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ Menu рдФрд░ Menu Item рдХреЛ Opaque props рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред

          <Menu>
            { menus.map((item) => {
              if (item.to) {
                return <Menu.Item title={item.title} />;
              }
              // some codes...
              return null;
            })}
          </Menu>
    

    @moonjoungyoung @adamerose
    рдХреНрдпрд╛ рдЖрдкрдиреЗ рдзрд╛рдЧрд╛ рдкрдврд╝рд╛ рд╣реИ?
    рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдПрдиреЙрдЯ рдШрдЯрдХ рдореЗрдВ рдЖрд░рд╛рдо рд╕рд╣рд╛рд░рд╛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

    рдпрд╣рд╛рдБ рдореЗрд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП react-router NavLinks antd Menu рд▓рд┐рдП рд╕рд╢рд░реНрдд рдкреНрд░рддрд┐рдкрд╛рджрди, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдлрд┐рдХреНрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИ - рдореБрдЭреЗ рдмрд░реНрдмрд╛рдж рдХрд░ рджрд┐рдпрд╛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдЦреЛрдЬрдиреЗ рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗред

    _edit- рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдЪрдпрдирд┐рддрдХреЗрдИрдПрд╕ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ_

    const Nav = withRouter(() => {
      const auth = store.isAuthenticated;
    
      return (
        <Menu selectedKeys={[history.location.pathname]} mode="horizontal">
          <NavItem id="/">Home</NavItem>
          {auth && <NavItem id="/create">Create Post</NavItem>}
          {!auth && <NavItem id="/sign-in">Sign In</NavItem>}
          {!auth && <NavItem id="/register">Register</NavItem>}
        </Menu>
      );
    });
    
    const NavItem = ({ ...props }) => (
      <Menu.Item {...props} key={props.id}>
        <NavLink exact to={props.id}>
          {props.children}
        </NavLink>
      </Menu.Item>
    );
    

    @moonjoungyoung @adamerose
    рдХреНрдпрд╛ рдЖрдкрдиреЗ рдзрд╛рдЧрд╛ рдкрдврд╝рд╛ рд╣реИ?
    рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдПрдиреЙрдЯ рдШрдЯрдХ рдореЗрдВ рдЖрд░рд╛рдо рд╕рд╣рд╛рд░рд╛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

    рдХреНрдпрд╛ рдЖрдк рдКрдкрд░ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╣рд░ рдХрд╛рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдиреАрдЪреЗ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ Menu.Item рдкрд░ рдЙрдиреНрд╣реЗрдВ рдлреИрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╕рдХреНрд░рд┐рдп рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдЕрднреА рднреА рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдШрдЯрдХ рдЯреНрд░реА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ
    image

    рдореИрдВрдиреЗ рдЙрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ ...

    рдФрд░ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдЖрд░рд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрд╛рдиреА рдХреЛ рд╕рд╣рд╛рд░рд╛ред рдкрддрдиред рдкреИрдирд▓ (рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рд╕реА-рдкреИрдирд▓ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЬрд╛рдВрдЪреЗрдВ)

    рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ "{... рдкреНрд░реЙрдкреНрд╕}" рдХреЗ рдкреАрдЫреЗ "рд╣реИрдбрд░ = {рдЧрдгрдирд╛_рд╣реЗрдбрд░}" рд▓рдЧрд╛рдирд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдкреИрдирд▓ рдХрд╛ рд╣реЗрдбрд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "{... рдкреНрд░реЙрдкреНрд╕}" рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ "рд╣реЗрдбрд░" рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рд╢реБрд░реБрдЖрдд рдореЗрдВ "{... рдкреНрд░реЙрдкреНрд╕}" рдбрд╛рд▓рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рд╣реЗрдбрд░" рдЬреЛ рдмрд╛рдж рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ "рд╣реЗрдбрд░" рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рджреЗрддреЗ рд╣реИрдВред

    рдореЗрд░рд╛ marcin-piela рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

    export const CustomPanel: React.FC = ({ headerinfo, children, ...props }) => { // do whatever you like const calculated_header = {() => headerinfo.someinformation } return <Collapse.Panel {...props} header={calculated_header} > {children} </Collapse.Panel> };

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

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

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

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

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

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

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