[reactjs] ReactJS의 동적 속성
버튼 요소에 비활성화 된 속성을 동적으로 포함 / 생략하고 싶습니다. 동적 속성 값의 예를 많이 보았지만 속성 자체는 보지 못했습니다. 다음과 같은 렌더링 기능이 있습니다.
render: function() {
var maybeDisabled = AppStore.cartIsEmpty() ? "disabled" : "";
return <button {maybeDisabled}>Clear cart</button>
}
“{“문자로 인해 구문 분석 오류가 발생합니다. AppStore.cartIsEmpty ()의 (boolean) 결과에 따라 disabled 속성을 어떻게 포함 / 생략 할 수 있습니까?
답변
선택적 속성 ( 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'));
스프레드 속성을 사용하면 자바 스크립트 개체 인스턴스를 사용하여 원하는 속성을 동적으로 추가 (또는 재정의) 할 수 있습니다. 위의 예에서 코드 는 속성이 구성 요소 인스턴스에 전달 될 때 disabled
키 ( disabled
이 경우 값 포함)를 만듭니다 .disabled
Hello
만 사용하려면 disabled
하지만 이 대답은 잘 작동합니다.
답변
disabled
속성에 부울을 전달할 수 있습니다 .
render: function() {
return <button disabled={AppStore.cartIsEmpty()}>Clear cart</button>
}
답변
나는 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;
};
다음과 같이 반응 구성 요소를 호출하십시오.
<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 && {disabled: true}}>Clear cart</button>
비활성화는 이와 같은 소품에서 가져와야합니다.
<MyComponent disabled />