所以我有这种形式,可以通过storeUserSearch实时更新搜索,这就是为什么未在输入中设置值的原因。我正在尝试实现一个图标,该图标删除单击时输入字段中的内容,并运行动作storeUserSearch('')。
第二个onClick本身没有问题。我只是想让第一个onClick正常工作,然后让它们同时运行,以便我的点击同时执行。
<form>
<input
className="searchBox fas fa-search"
type="search"
placeholder="Search"
onChange={event => this.props.storeUserSearch(event.target.value) } />
<i className="fas fa-times-circle" onClick={event => event.target.parentElement.input} onClick={event => this.props.storeUserSearch('')}> </i>
</form>
编辑:弄清楚如何通过以下方式重置值:
onClick={event => event.target.parentElement.firstChild.value=''}
只需要弄清楚现在如何组合onClicks。
答案 0 :(得分:2)
为什么要在同一元素上编写两个onClick?只需在其click事件上传递一个方法,然后在其中写入所有逻辑即可。 即:
<i className="fas fa-times-circle" onClick={this.handleIconClick}> </i>
// and in handleIconClick function write the logic.
handleIconClick = (e)=>{
e.target.parentElement.firstChild.value='';
this.props.storeUserSearch('');
}
答案 1 :(得分:1)
您无法定义两个onClick
道具,一个将覆盖另一个。您可以尝试类似
onClick={(event) => {event.target.parentElement.firstChild.value=''; this.props.storeUserSearch('')}}
请注意两个单独的语句之间的分号
答案 2 :(得分:0)
每个组件只能具有1个onClick
属性,不能多个。我不确定storeUserSearch
函数应该做什么,因为您的代码段中省略了该函数,但是根据您的解释,我认为您可以实现与以下类似的操作:>
class SearchForm extends React.Component {
constructor () {
super();
this.state = {
inputValue: ''
};
}
render() {
return (
<div>
<input
type="text"
value={ this.state.inputValue }
onChange={
e => {
this.setState({inputValue: e.target.value})
}
}
/>
<input
type="button"
value="Clear input"
onClick={
() => {
this.setState({inputValue: ''})
}
}/>
<span style={{ display: 'block' }}>Current textbox state: <span style={{ color: 'blue' }}>{this.state.inputValue}</span></span>
</div>
);
}
}
ReactDOM.render(<SearchForm></SearchForm>, document.querySelector('#app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"></div>
基本上,我们创建一个由2个input
元素(1个text
和1个button
)组成的组件。我采用的方法是简单地将value
属性设置为等于我们组件的state.inputValue
,属性每次发生change
事件时都会更新。
我们只是在按下清除按钮时将state.inputValue
属性硬编码为''
。