Rotate arrow indicator in React-select v2

后端 未结 2 1208
耶瑟儿~
耶瑟儿~ 2021-02-11 00:06

I\'m using React Select v2 in my project with Styled Components and I need to be able to turn the arrow indicator upside down when the menu is open, which was supported in v1.

2条回答
  •  野性不改
    2021-02-11 00:48

    Technically you can use the style-in-JS props of the v2. Like the following example:

    dropdownIndicator: (base, state) => ({
        ...base,
        transition: 'all .2s ease',
        transform: state.isFocused ? 'rotate(180deg)' : null
      })
    

    It seems that the isFocused state isn't bind with the isMenuOpen state but with the real focus state of the container.

    A solution is to set closeMenuOnSelect={false} so the user would have to click outside the select and your arrow will flip back.

    Or you could change the className props using onMenuOpen and onMenuClose by adding a specific suffix to target your animation.

    UPDATE

    You can directly access the menuOpen props via the state so no need to manually add class like the following:

    dropdownIndicator: (base, state) => ({
      ...base,
      transition: 'all .2s ease',
      transform: state.selectProps.menuIsOpen ? 'rotate(180deg)' : null
    })
    

    PLEASE NOTE THAT

    In react-select v2.3 a control--menu-is-open has been added directly in the code.

提交回复
热议问题