我有一个React组件,其中包含一些按钮和文本输入框。在完成某些其他工作之前,我希望完全禁用此组件中的所有内容。如何使整个内部组件不可用?
我有一个React组件,其中包含一些按钮和文本输入框。在完成某些其他工作之前,我希望完全禁用此组件中的所有内容。如何使整个内部组件不可用?
disabled
属性并使用CSS禁用div。const MyComponent = ({disabled}) => {
return (
<div style={disabled ? {pointerEvents: "none", opacity: "0.4"} : {}}>
<h1> Text</h1>
<input type="text"/>
<input type="password"/>
<button>Login</button>
</div>
)
}
最好使用form
和fieldset
,并将所有的输入/按钮元素放在其中。您可以通过将disabled
属性设置为fieldset
来禁用它们中的所有元素。
有关更多详细信息,请参阅MDN文档。
工作示例:
class App extends React.Component {
constructor () {
super()
this.state = { disable: false }
}
toggleDisable = () => this.setState(prevState => ({disable: !prevState.disable}))
buttonClick = (e) => {
e.preventDefault();
console.log('button clicked');
}
render (){
return (
<div>
<button className='toggle' onClick={this.toggleDisable}>Toggle Disable</button>
<form>
<fieldset disabled={this.state.disable}>
<input />
<button onClick={this.buttonClick}>Button</button>
</fieldset>
</form>
</div>
)
}
}
ReactDOM.render(<App />, document.getElementById('app'))
.toggle {
margin-bottom: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id='app' />
您可以使用禁用属性模式来解决问题。
const App = () => {
return (
<div>
<SomeComponent disabled />
</div>
);
};
const SomeComponent = ({ disabled = false }) => {
return (
!disabled && (
<div>
<h2>Disable SomeComponent to see magic happen!</h2>
</div>
)
);
};
disabled
属性,然后将其传递给内部字段,例如:<MyComponent disabled={shouldComponentBeDisabled} {...otherProps} />
并在实现中
const MyComponent = ({disabled}) => {
return <div>
<button disabled={disabled}>someBtn</button>
<input type="text" disabled={disabled}/>
</div>
}