【问题标题】:Reactjsx set style depending on JSON-ValueReactjsx 根据 JSON-Value 设置样式
【发布时间】:2018-07-10 14:01:41
【问题描述】:

下午好,我正在尝试用 React 编写一个 SPA。

我从一个验证输入字段的网络服务中得到一个 JSON 对象。

现在我想根据 Web 服务的答案设置输入字段的样式。 例如样式应该是:

style={{borderColor: 'green',   boxShadow: '0 0 5px green',}}

当 JSONValue 为 0 时

<Input
    style = ???
    ...
/>

我的 JSON 如下所示:

{
    "validate": {
        "isValidTest": 0
        ...
    }
}

编辑:JSON 可以有三个不同的值,对应三种不同的样式。

【问题讨论】:

标签: json reactjs styles


【解决方案1】:

这是你可以做的一个例子

示例 1

<Input
    style = 
        {{borderColor: obj.validate.isValidTest === 0 ? 'red':'green'
        boxShadow: `0 0 5px ${obj.validate.isValidTest === 0 ? 'red' : 'green'}`}}
    ...
/>

这里发生了什么

通过使用简写条件,我们可以根据obj 中isValidTest 的值将borderColor 和boxShadow 应用于样式(将被您的对象名称替换)(!!)

看看this example 看看这里发生了什么

注意 当然,可以通过根据isValidTest 的结果设置className 或根据相同的条件对其应用不同的样式常量来将其与内联style 属性分开

示例 2

const errorStyles = {
  borderColor: 'red',
  boxShadow: '0 0 5px red'
}
const validStyles = {
  borderColor: 'green',
  boxShadow: '0 0 5px green'
}

<Input
    style={ obj.validate.isValidTest === 0 ? errorStyles : validStyles }
/>

同样,this sandbox 中的两个示例都显示在同一文件的同一页面上。

您还可以查看this question & answer 了解更多示例和信息

编辑

要在isValidTest 中考虑两个以上的值,您可以这样处理:

const errorStyles = {
  borderColor: 'red',
  boxShadow: '0 0 5px red'
}
const validStyles = {
  borderColor: 'green',
  boxShadow: '0 0 5px green'
}
const error2Styles = {
  borderColor: 'magenta',
  boxShadow: '0 0 5px magenta'
}
const valid2Styles = {
  borderColor: 'yellow',
  boxShadow: '0 0 5px yellow'
}


isValid = (valid) => {
    switch(valid) {
      case -1:
        return errorStyles
        break;
      case 0:
        return error2Styles
        break;
      case 1:
        return validStyles
        break;
      case 2:
        return valid2Styles
        break;
   }
}


<Input
    style={this.isValid(obj.validate.isValidTest)}
/>

上面的例子发生了什么

如上所示,style 属性指的是this.isValid,而this.isValid 又返回包含样式的const,提供给此函数的是来自obj.validate 的isValidTest 属性。

我已更新 sandbox 以包含上述示例

希望这会有所帮助!

【讨论】:

  • 感谢您的快速帮助!!!如果我在 JSON 中有三个或更多具有不同样式的可能值,你能告诉我如何做到这一点吗?
  • 三个可能的值是什么?是isValidTest 能够像0 1 或2 一样吗?或者这是否意味着有多个键? @FlorianWidder
  • 值可以是-1、0、1 和2。每次每个输入只有一个值/样式。 @简单
  • @FlorianWidder 乐于助人!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 2018-04-04
  • 2011-01-21
  • 2019-12-08
  • 2019-09-06
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多