javascript - 为什么单击按钮后重新排序不起作用?

标签 javascript reactjs

我有菜单选项(有文本和按钮),我必须在单击按钮时打开菜单选项。 您能告诉我为什么当我单击按钮时重新渲染不起作用

https://codesandbox.io/s/angry-albattani-qvtec

const HeaderFilter = ({ menu }) => {
  const { type, open } = menu;
  const showFilters = () => {
    switch (type) {
      case "text":
        break;
      case "dropdown":
        const cls = open ? "open" : "";
        return (
          <div className={`primary-filter ${cls}`}>
            <p>
              <button
                className={`icon-chevron-left ${cls}`}
                onClick={() => {
                  menu.open = !open;
                }}
              >
                open
              </button>
            </p>
            <ul className="primary-filter--menu">
              {menu.options.map(i => (
                <li>
                  <Checkbox
                    value={i}
                    inputProps={{ "aria-label": "primary checkbox" }}
                  />
                  {i}
                </li>
              ))}
            </ul>
          </div>
        );
    }
  };

  return <>{showFilters()}</>;
};

export default HeaderFilter;

最佳答案

import React from "react";
import { useState } from "react";
import Checkbox from "@material-ui/core/Checkbox";

const HeaderFilter = ({ menu }) => {
  const { type } = menu;
  const [open, setopen] = useState(menu.open);

  const showFilters = () => {
    switch (type) {
      case "text":
        break;
      case "dropdown":
        const cls = open ? "open" : "";
        return (
          <div className={`primary-filter ${cls}`}>
            <p>
              <button
                className={`icon-chevron-left ${cls}`}
                onClick={() => setopen(!open)}
              >
                open
              </button>
            </p>
            <ul className="primary-filter--menu">
              {menu.options.map(i => (
                <li>
                  <Checkbox
                    value={i}
                    inputProps={{ "aria-label": "primary checkbox" }}
                  />
                  {i}
                </li>
              ))}
            </ul>
          </div>
        );
    }
  };

  return <>{showFilters()}</>;
};

export default HeaderFilter;

https://codesandbox.io/s/hopeful-bird-h8wuv

关于javascript - 为什么单击按钮后重新排序不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59858965/

相关文章:

javascript - 表单上 React 回调的困惑

javascript - 使用 MobX 存储循环引用进行设置测试

javascript - 阻止 CKEditor 制作内联样式?

javascript - 如何使用 react-table 仅重新呈现更新的行?

javascript - 键入 svg 元素在对象中使用react

javascript - 如何通过多个标签过滤 JSON 中的数组

reactjs - 如何从 React 组件订阅 Redis channel

javascript - Node 异步未运行异步

javascript - 表单提交 onChange 事件不适用于 JQuery 函数

javascript - Ajax图片上传注意事项