2

我想呈现一个 HTML 复选框,其选中状态由数据控制。

给一个接收item类型的无状态组件{ label: string, checked: bool}

像这样:

let component = ReasonReact.statelessComponent("TodoItem");

let make = (~item, _children) => {
  render: _self => {
     <li> <input type_="checkbox" {/*looking for something like this*/ item.checked ? "checked" : "" /* doesn't compile */}/> {ReasonReact.string(item.label)} </li>
  }
}

如何根据条件将属性的存在添加checkedinput标签中item.checked == true

4

1 回答 1

5

正如@wegry 在评论中所说,直接传递值似乎更适合您的用例,因为item.checked已经是一个布尔值,并且checked需要一个布尔值。

但要更笼统地回答,由于 JSX 属性只是底层的可选函数参数,您可以使用一个简洁的语法技巧来显式地将 an 传递option给它:只需在值前面加上?. 用你的例子:

let component = ReasonReact.statelessComponent("TodoItem");

let make = (~item, _children) => {
  render: _self => {
     <li> <input type_="checkbox" checked=?(item.checked ? Some(true) : None) /> {ReasonReact.string(item.label)} </li>
  }
}

或者,举一个你已经有选择的例子:

let link = (~url=?, label) => 
  <a href=?url> {ReasonReact.string(label)} </a>

这在 Reason 文档的函数页面上标题为Explicitly Passed Optional的部分中进行了记录。

于 2018-10-16T23:03:18.023 回答