Answers:
添加可选属性(包括disabled
和其他可能要使用的其他属性)的最简洁方法是当前使用JSX传播属性:
var Hello = React.createClass({
render: function() {
var opts = {};
if (this.props.disabled) {
opts['disabled'] = 'disabled';
}
return <button {...opts}>Hello {this.props.name}</button>;
}
});
React.render((<div><Hello name="Disabled" disabled='true' />
<Hello name="Enabled" />
</div>)
, document.getElementById('container'));
通过使用传播属性,您可以使用javascript对象实例动态添加(或覆盖)所需的任何属性。在上面的示例中,当属性传递给组件实例时,代码将创建一个disabled
键(disabled
在这种情况下为值)。disabled
Hello
如果您只想使用disabled
,则此答案很好用。
您可以将布尔值传递给disabled
属性。
render: function() {
return <button disabled={AppStore.cartIsEmpty()}>Clear cart</button>
}
disabled
上取决于值所产生的HTML你通过属性 jsfiddle.net/kb3gN/10379
我正在使用React 16,这对我有用(bool
您的测试在哪里):
<fieldset {...(bool ? {disabled:true} : {})}>
基本上,基于测试(bool
),您将返回具有属性的对象,或者返回空对象。
另外,如果您需要添加或省略多个属性,则可以执行以下操作:
<fieldset {...(bool ? {disabled:true} : {})} {...(bool ? {something:'123'} : {})}>
对于更精细的属性管理,建议您使用(或不使用)JSX外部的属性来预制对象。
适用于任何属性的更动态的动态属性处理方式是
function dynamicAttributes(attribute, value){
var opts = {};
if(typeof value !== 'undefined' && value !== null) {
opts['"'+attribute+'"'] = value;
return opts;
}
return false;
};
像下面这样调用您的react组件
<ReactComponent {...dynamicAttributes("disabled",false)}
{...dynamicAttributes("data-url",dataURL)}
{...dynamicAttributes("data-modal",true)} />
提示 :
您可以dynamicAttributes
在通用的地方/工具中使用功能,然后将其导入以在所有组件中使用
您可以传递值null
以不呈现动态属性
您可以在文档中找到与此类似的内容。
https://facebook.github.io/react/docs/transferring-props.html
在你的情况下可能是这样的
function MyComponent(props) {
let { disabled, ...attrs } = props;
if (disabled) {
// thus, it will has the disabled attribute only if it
// is disabled
attrs = {
...attrs,
disabled: true
}
};
return (
<button {...attrs}>MyLabel</button>
)
}
这段代码使用的是ES6,但我想你明白了。
这很酷,因为您可以将许多其他属性传递给此组件,并且它仍然可以工作。
我使用的版本是:
<button disabled={disabled ? 'disabled' : undefined}>
Click me (or dont)
</button>
首先,您可以简单地检查
<button disabled={true}>Button 1</button>
<button disabled={false}>Button 2</button>
注意:**禁用的值不是String,它应该是Boolean。
现在动态。你可以简单地写
<button type="button" disabled={disable}
onClick={()=>this.setSelectValue('sms')} >{this.state.sms}</button>
如您所见,我正在使用禁用的属性,并且在大括号中可以是局部变量/状态var。该变量disable
包含值true / false。
这可以工作,禁用的问题是不能简单地为其设置布尔值。
if(AppStore.cartIsEmpty()){
return "<button disabled>Clear cart</button>"
}
else
{
return "<button>Clear cart</button>"
}
a[disabled] { pointer-events: none; }
将停止对元素/组件执行操作