Я пытаюсь создать компонент Ui в Reactjs, который сочетает в себе флажок и текст, прикрепленный к нему (вместо текстовой метки), так что если флажок установлен, пользователь может изменить ввод текста, и если его неконтролируемый пользователь не сможет это сделать , конечной целью является визуализация вне компонента всех текстовых входов valus, которые остались отмеченными как список или как элемент меню. Его должно выглядеть так: Checkbox with Text inputКак скомпоновать флажок с текстовым вводом в responsejs
Кто-нибудь знает, как я должен это делать? im new to reactjs и немного запутался в том, как передавать логику между двумя компонентами (как здесь, между флажком и текстовым вводом, а также между комбо-компонентом и внешним отображаемым списком). благодарим заранее!
EDIT1: хорошо я сумел построить компонент, но я не могу заставить детей вызвать родительский обработчик (handlerCheckbox, handlerInput) для того, чтобы на самом деле сделать волшебство произойдет.
все, что вы делаете неправильно?
это ребенок:
class CheckboxTxtInput extends React.Component{
constructor(props){
super(props);
console.log(props.isChecked)
}
handleCheckboxChild(e) {
this.props.handleCheckbox(e,this.props.id)
}
handleInputChild(e){
this.props.handleInput(e,this.props.id)
}
render(){
return (
<div>
<input type="checkbox" onChange={this.handleCheckboxChild} defaultChecked={this.props.isChecked} />
<input type="text" value={this.props.inputValue} disabled={!this.props.isChecked} onChange={this.handleInputChild}/>
</div>
)
}
}
Это родитель:
export default class Text extends React.Component {
constructor(props) {
super(props);
this.state = {
textItems: [{id:0,inputValue:'text',isChecked:true},{id:1,inputValue:'text',isChecked:true}
,{id:2,inputValue:'text',isChecked:true},{id:3,inputValue:'text',isChecked:true}]
};
this.handleCheckbox = this.handleCheckbox.bind(this);
this.handleInput= this.handleInput.bind(this);
}
handleCheckbox(e,id) {
var stateCopy = Object.assign({}, this.state);
stateCopy.textItems[id].isChecked = e.target.value;
this.setState(stateCopy);
}
handleInput(e,id){
var stateCopy = Object.assign({}, this.state);
stateCopy.textItems[id].text = e.target.value;
this.setState(stateCopy);
}
render() {
return (
<div>
<hr className="divider-long"/>
<UI.sectionDividerLabeled label="Show/Hide Text"/>
<hr className="divider-long"/>
<p>Here you can show\hide your text</p>
<div>
<CheckboxTxtInput id={this.state.textItems[0].id} isChecked={this.state.textItems[0].isChecked}
inputValue={this.state.textItems[0].inputValue} handleInput={this.handleInput}
handleCheckbox={this.handleCheckbox} />
<CheckboxTxtInput id={this.state.textItems[1].id} isChecked={this.state.textItems[1].isChecked}
inputValue={this.state.textItems[1].inputValue} handleInput={this.handleInput}
handleCheckbox={this.handleCheckbox}/>
<CheckboxTxtInput id={this.state.textItems[2].id} isChecked={this.state.textItems[2].isChecked}
inputValue={this.state.textItems[2].inputValue}
handleInput={this.handleInput} handleCheckbox={this.handleCheckbox}/>
<CheckboxTxtInput id={this.state.textItems[3].id} isChecked={this.state.textItems[3].isChecked}
inputValue={this.state.textItems[3].inputValue} handleInput={this.handleInput}
handleCheckbox={this.handleCheckbox}/>
</div>
<RenderText />
</div>
)
}
}
, так что дайте мне знать, если я вас убежу. мне нужно сделать 2 компонента (один для флажка и один для ввода текста) и завернуть их третьим компонентом, который действует как родитель? должен ли компонент флажка и компонент ввода текста состоять из состояний? или просто родитель? im с борьбой за определение того, как parnet контролирует детей (как то, как поле ввода может знать, что оно может быть включено, если флажок установлен) спасибо dude –
Да, это правильно. ни одного состояния у двух детей, только у родителя. просто используйте реквизит, чтобы передать состояние родителям каждому ребенку. – Chris