Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

330
Views
React - Aria-expandable needs to be on true to expand a dropdown

I'm trying to add aria-expanded to a button that is used to create a dropdown. The problem is that aria-expanded needs to be in true to expand the dropdown options. This component is used as normal button, too. I don't know if this is a good aproach. Because in a normal button I will have aria-expanded which is not desirable. So I'm having two problems.

Could be the problem be to have onClick and onBlur? Maybe if I use only onClick?

This is my component.

const Button = ({
    id,
    type,
    image,
    iconRight,
    label,
    href,
    to,
    bsStyle,
    secondary,
    inverse,
    small,
    expandable,
    block,
    disabled,
    loading,
    onClick,
    replace,
    defaultLabelText,
    className,
    style,
    children,
    ...props
}) => {
    const [pressed, setPressed] = useState(false);
    const [boolValue, setBoolValue] = useState(false);

    useEffect(() => {
        setPressed(boolValue);
    }, [boolValue]);

    const handleToggle = (value) => {
        setBoolValue(value);
    };

    const handleClick = (event) => {
        if (typeof onClick === "function") {
            onClick(event);
        }
    };

    const handleFocus = (event) => {
        handleToggle(true);
        if (typeof props.onFocus === "function") {
            props.onFocus(event);
        }
    };

    const handleBlur = (event) => {
        handleToggle(false);
        if (typeof props.onBlur === "function") {
            props.onBlur(event);
        }
    };

    return (
        <button
            {...(expandable && { "aria-expanded": `${pressed}`, "aria-controls": `${id}` })}
            type="button"
            onClick={handleClick}
            onFocus={expandable ? (event) => handleFocus(event) : undefined}
            onBlur={expandable ? (event) => handleBlur(event) : undefined}
            style={style}
            disabled={disabled}>
            <>
                {image && !iconRight && <Image src={image} />}
                {label && <I18n id={label} {...replace} defaultValue={defaultLabelText} />}
                {!label && defaultLabelText && <span>{defaultLabelText}</span>}

                {children}

                {image && iconRight && <Image iconRight src={image} />}
            </>
        </button>
    );
};
about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!