Я написал демо ниже для тестирования React
controlled component
input
особенность. Но похоже, что есть ошибка.Заданное значение входного сигнала компонента управления с пустой строкой
class TestComponent extends React.Component{
constructor() {
super();
this.state = {value: 'beef'};
this.handleValueChange = this.handleValueChange.bind(this);
}
handleValueChange(e) {
this.setState({value: e.target.value});
}
render() {
return <div>
<div><input type='text' value={'hello world'} onChange={this.handleValueChange}/></div>
<div><input type='text' value={''} onChange={this.handleValueChange}/></div>
<div><input type='text' value={this.state.value} onChange={this.handleValueChange}/></div>
<div><input type='text' value={null} onChange={this.handleValueChange}/></div>
<div><input type='text' value={undefined} onChange={this.handleValueChange}/></div>
<hr/>
<div><input type='text' defaultValue={this.state.value} onChange={this.handleValueChange}/></div>
<p>{this.state.value}</p>
</div>
}
}
ReactDOM.render(
<TestComponent />,
document.body
)
<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>
Первый input
с заданным строковое свойство значения. когда я что-то печатаю, вызовите функцию handleValueChange
, и результат hello world
+ your type thing's first character
.
Второй input
с пустым значением стоимости строки. когда я что-то печатаю, он вызывает функцию handleValueChange
, но, наконец, он всегда дает мне один символ.
Это странно.
обновлен! я добавить input
с defaultValue
, сравните с value={this.state.value}
, моя голова запутались ..
Попробуйте удалить ** значение = {''} ** на втором входе. Поскольку каждое событие handleValueChange вызвано, его значение будет сброшено –
Если ни один из ответов не верен, я не уверен, что вы на самом деле хотите сделать. В чем заключается необходимость использования 'value = {''}'? – chrisv