새로운 구성 요소를 하위 클래스로 전달하여 하위 구성 요소 (UpdateInputBox)의 입력 요소에 대한 테두리 상자를 업데이트 할 수있는 방법을 살펴 보았습니다. 부모 구성 요소 (TextInput)에서 prop. 입력 요소를 검사하면 새 클래스가 입력 요소에 추가되는 것을 볼 수 있지만 스타일은 업데이트되지 않습니다.상태 또는 소품을 사용하여 상위 구성 요소에서 하위 구성 요소의 입력 요소 스타일 지정을 변경하십시오.
내 자식 구성 요소가 소품 변경으로 렌더링되지 않을 수 있으므로이 느낌이 들었습니다. 아래
코드 :
JSX가 scss
파일의 클래스 명을 확인
import React from 'react';
import styles from './styles.scss';
export default class TextInput extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedStateForText: 'textInputNonFocussed'
}
this.changeInputState = this.changeInputState.bind(this);
}
changeInputState(e) {
this.setState({
selectedStateForText: e.target.value,
});
}
render() {
return (
<h1>Individual input Test Component</h1>
<UpdateInputBox updateClass={this.state.selectedStateForText}/>
<form className='textInputStyleSelector' onChange={this.changeInputState.bind(this)}>
<input type='radio' name='class' value='textInputNonFocussedValid' checked={this.state.selectedStateForText === 'textInputNonFocussedValid'} />Non-Focussed Valid
<input type='radio' name='class' value='textInputFocussedValid' checked={this.state.selectedStateForText === 'textInputFocussedValid'} />Focussed Valid
<input type='radio' name='class' value='textInputNonFocussedInvalid' checked={this.state.selectedStateForText === 'textInputNonFocussedInvalid'} />Non-Focussed Invalid
</form>
</div>
);
}
}
class UpdateInputBox extends React.Component {
constructor(props){
super(props);
this.state= {
updateClass: props.updateClass
}
}
render() {
return (
<input id='inputStyleComponents' className={this.state.updateClass} placeholder='Label text *' type='text' />
);
}
}
스타일 SCSS 파일
$titanium: #686868;
$font-input-placeholder: Regular;
$font-size-small: 12px;
$emerald: #3dc238;
$ruby: #a3403e;
.textInputContainer {
background-color: white;
}
.inputStyleComponents {
display: inline-block;
margin: 10px;
}
// placeholder default css
::-webkit-input-placeholder { /* Chrome/Opera/Safari */
color: $titanium;
font-family: $font-input-placeholder;
font-size: $font-size-small;
}
::-moz-placeholder {
color: $titanium;
font-family: $font-input-placeholder;
font-size: $font-size-small;
}
:-ms-input-placeholder {
color: $titanium;
font-family: $font-input-placeholder;
font-size: $font-size-small;
}
// Text Field Non Focussed class (styles can be applied to the input element but defining a class for testing)
input[type=text] {
border: 1px solid $titanium;
border-radius: 3px;
padding: 8px 10px;
vertical-align: middle;
outline: none;
}
input[type=text]:focus, .textInputFocussed {
box-shadow: 0px 0px 5px lavender;
}
.textInputNonFocussedValid {
box-shadow: 0px 0px 5px $emerald;
}
.textInputFocussedValid {
box-shadow: 0px 0px 5px springgreen;
}
.textInputNonFocussedInvalid {
box-shadow: 0px 0px 5px $ruby;
}
.textInputFocussedInvalid {
box-shadow: 0px 0px 5px crimson;
}
input[type=text]:disabled {
opacity: 0.5;
background-color: #fff;
}
input[type=radio] {
margin: 10px;
}
덕분에 존재하는 스타일링이 그것을 고정 저를 도왔다. 내가 가진 추가 변경을 만드는 작업에 대한 자세한 내용과 주석 아래에 추가 –