子要素(UpdateInputBox)の入力要素のボーダーボックスを更新する方法を見ています。 (TextInput)から親のプロップを作成します。入力要素を調べると、新しいクラスが入力要素に追加されているのがわかりますが、スタイリングは更新されません。子要素の入力要素のスタイリングを親要素からステートまたは小道具を使用して変更する
私の子供のコンポーネントが小道具の変更に描画されていない可能性がありますので、これが気分です。以下
コード:
JSXは
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;
}
ありがとうございました。下記のコメントを追加して、追加の変更を加えなければならない –