【问题标题】:Change a component props based on another根据另一个组件更改组件道具
【发布时间】:2021-10-20 06:24:41
【问题描述】:

问题: 我需要根据 onclick 事件更改两个组件。 onclick 事件 handleChange 上显示的函数有一个 prop 'text' 。每当我运行 onclick 事件时,我都需要将 prop 的值更改 3 次。

1.
我有一个芯片组件(第一个组件),我想在单击按钮(第二个组件)时更改其文本和颜色;该按钮也将更改其文本。所以我在按钮中使用了条件渲染和 onclick 事件。

这里的事情是我有 3 个状态我想改变我的芯片和按钮,但只能用两个来实现

-我在使用 useState 创建状态常量时应用的默认值:

const [change, setChange] = useState("Pending");

-我在按钮中传递给事件的值:

<Button variant="contained" onClick={() => handleChange("hello")}>

2.

除了第一个按钮之外,我还有另一个按钮,每当我的第三个芯片状态发生变化时,我想隐藏它。

我有 3 个状态:你好、待定、取消。

当第一个按钮和芯片更改为取消我想隐藏我的第三个按钮。

我试着做一个switch语句来解决3个状态的问题,但是我不知道怎么用。我不知道如何在按钮内传递 3 个值(hello、pending、cancel。)

Here is my code example

注意:我是代码沙箱的新手,所以请告诉我你是否看到了变化,因为我对平台的管理不够好

【问题讨论】:

  • @oxygen 在这里也很容易解释/解释/等,并按照预期的方式使用 SO。
  • @DaveNewton 谢谢!但我没听懂你说什么
  • @oxygen 我已经更新了问题。

标签: javascript reactjs material-ui render conditional-operator


【解决方案1】:

假设你的三个状态是有序的

const state = ["pending", "hello", "cancel"];
const [change, setChange] = useState(0);

function handleChange() {
  setChange(prevState => prevState === 2 ? 0 : prevState + 1);
}
  
const style = [
  {color: 'secondary'},
  {color: 'primary'},
  {style: {backgroundColor:"#7ed6df"}}
];

return (
  <>
    <Chip label={state[change]} {...style[change]} />
    <Button variant="contained" onClick={handleChange}>
      {state[change]}
    </Button>
    {change !== 2 && <Button variant="contained">Disappear</Button>}
  </>
);

【讨论】:

  • 太棒了!谢谢
  • 我实际上无法理解有关隐藏按钮的这一行:change !== 2 &amp;&amp; .. 为什么是!== 2 而不是=== 2
  • 如果状态为cancel,则按钮消失,因此如果change !== 2,则出现
  • 嘿我又回来了嘿嘿...你能再帮我一次吗?在函数 handle Change 中。我们使用三元运算符。完全没问题,但是我怎样才能改变条件以避免数组结束时 prevState 应该停止改变?我尝试更改数组中不存在的另一个 0 的值,但它不起作用。
  • @Karol 您是否希望您的 handleChange 仅在 0 到 2 中运行一次,而在 change 到达 2 后不再运行?
猜你喜欢
  • 2020-12-21
  • 2020-04-11
  • 2019-11-14
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 2021-10-18
相关资源
最近更新 更多