【问题标题】:How to change props (variant) of a material-ui Button?如何更改material-ui Button的道具(变体)?
【发布时间】:2020-02-05 01:59:54
【问题描述】:

我有一排按钮,希望在单击时将 Button 组件更改为“包含”,否则更改为“文本”。此外,当单击一个按钮时,其他按钮应恢复正常。我尝试将 onClick 处理程序添加到按钮组件并获取状态更改,但这非常令人困惑。由于我是 React 的新手,因此希望有代码 sn-p 来提供帮助。 下面是我尝试过的代码,但出现错误“TypeError: Unable to get property 'red' of undefined or null reference”:

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

let initialState = {
    red: false,
    blue: false,
    green: false
};

export default function Home() {

   const [initialState, setState] = useState();

   const handleClick = (name) => event => {
   switch(name){
      case 'Red': initialState.red = true; break;
      case 'Blue': initialState.blue = true; break;
      case 'Green': initialState.green = true; break;
      default: break;
   }
   setState(initialState);
 }

 return (
    <div className="Home">
      <Button onClick={handleClick("Red")} variant={initialState.red ? "contained" : "text"}> Red </Button>
      <Button onClick={handleClick("Blue")} variant={initialState.blue ? "contained" : "text"} > blue </Button>
      <Button onClick={handleClick("Green")} variant={initialState.green ? "contained" : "text"} > green </Button>
  </div>
);
}

【问题讨论】:

  • 我认为你已经正确地实现了它。你也可以发布一些代码吗?
  • 另外你确定要改变点击按钮的属性吗?或者您想更改按钮(不是道具)onClick 的背景?因为它可能会发生您更改按钮的道具只是为了更改按钮的背景外观
  • 修改了问题以获取更多信息...

标签: reactjs button material-ui


【解决方案1】:

这是一个使用带有 react https://codesandbox.io/s/gracious-frog-du5s1 的钩子的示例。

虽然听起来你想要切换按钮。如果您使用的是最新的 material-ui,这是他们已经构建的组件https://material-ui.com/components/toggle-button/。如果您希望更改外观,您可以查看所涉及的各个组件的 CSS API。

编辑:这是根据您提供的信息https://codesandbox.io/s/wonderful-dhawan-ysjgk

更新的带有 cmets 的沙箱

此外,您从未将您的 initialState 加载到钩子 useState(initialState ) 中,这就是您收到该错误的原因。

请务必在此处https://reactjs.org/docs/hooks-reference.html#functional-updates 阅读有关 useState 的文档中的以下注释,以确保您的更新正常工作onClick。甚至可能为此使用useReducer 钩子。

【讨论】:

  • 这行得通。然而,每个按钮都有一个这样的功能和状态的问题。我宁愿拥有单击处理程序并相应地设置状态。另外,我还希望其他按钮在单击时恢复正常。我已经用代码 sn-p 更新了这个问题。但是我收到错误“TypeError:无法获取未定义或空引用的属性'红色'”。请帮忙
  • P.S. - 我不想使用切换按钮。
  • @VitthalKulkarni 我更新了我的沙盒和解释
  • 太棒了!它按预期工作。感谢您的帮助。我一定会仔细阅读您提到的文档并清除我的概念。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2019-10-03
  • 2018-03-26
  • 2021-01-20
  • 2019-04-26
相关资源
最近更新 更多