【问题标题】:Styling in-line components on select specific item在选定的特定项目上设置内联组件的样式
【发布时间】:2021-07-14 08:05:51
【问题描述】:

我希望能够为我选择的项目创建一些不同的 UI。

我正在为我选择的语句使用钩子,它工作得很好,我只是无法使样式工作。

当前的用户界面 - 基本的引导卡。 Wished UI - 选中时有边框的引导卡。

用于检测选择的我的 Hooks(工作正常)

const [selected, setSelected] = useState(items.one); // default value

到目前为止我尝试实现的目标:

                <Card
                    onClick={() => setSelected(items.two)}
                    style={{
                        borderColor: selected ? 'black' : "none",
                    }}
                >
                </Card>
                <Card
                    onClick={() => setSelected(items.three)}
                    style={{
                        borderColor: selected ? 'black' : "none",
                    }}
                >
                </Card>
                ..................
                ..................

对于每张卡片都是相同的逻辑 - 但它不会检测到选择并且卡片总是有黑色边框。我在上面尝试过的是,选择特定项目时,请给出黑色边框,否则没有。

任何解决方案我怎样才能获得更好的 UI/UX?我不知道为什么它不起作用。

【问题讨论】:

    标签: javascript css reactjs onclick react-hooks


    【解决方案1】:

    每张卡片都是相同的逻辑。所以你可以使用map 来渲染。我看到你的items 是对象,所以首先将项目转换为arrayKey:const itemsKey = Object.keys(items);

    下一步:更新渲染

      {itemsKey.map((key, index) => (
        <Card
          key={index}
          data={items[key]}
          onClick={() => setSelected(key)}
          style={{
            borderColor: selected === key ? "black" : "none",
          }}
        />
      ))}
    

    【讨论】:

    • {index} 来自哪里?我有它未定义因此错误
    • 我知道缺少什么,无论如何感谢您的更新。但它没有打印任何其他东西然后 [Object Object],似乎它没有得到它。
    • 我只是评论解决方案。您需要更新以匹配您的项目
    • 那么您将如何映射各个标题? - {items.title} ?
    • items的内容是什么?如果它包含更多其他信息:我认为您应该像这样更新: setSelected("two")} style={{ borderColor: selected === "two" ? 'black' : "none", }} > setSelected("three")} style={{ borderColor: selected === "three" ? “黑色”:“无”,}} >
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多