React Native - TextInput.setNativeProps不会触发onChange

时间:2016-05-25 21:03:29

标签: javascript reactjs react-native

我正在尝试使用setNativeProps({ text: '' })清除文本输入,根据文档是一种常见的方式 - 由于状态更改的闪烁 - 但是,我确实注意到{{1}调用onChange时不调用。对我来说,这是一个问题,因为我使用的是可调整大小的TextArea。我需要TextArea重置其高度,目前已完成setNativeProps

如果有人可以帮助阐明我的问题,我们将不胜感激。

这是组件

onChange

从我的其他组件,我正在执行以下操作来清除输入

import React, { Component } from 'react'; import { TextInput, } from 'react-native'; export default class Input extends Component { constructor() { super(); this.state = { height: 35, }; this.handleChange = this.handleChange.bind(this); } componentWillMount() { const { defaultHeight } = this.props; if (defaultHeight) { this.setState({ height: defaultHeight, }); } } handleChange(event) { console.log(event); if (this.state.height !== event.nativeEvent.contentSize.height) { this.setState({ height: Math.max(this.props.defaultHeight, event.nativeEvent.contentSize.height), }); } if (this.props.onChange) { this.props.onChange(event); } } render() { const { style, ...props } = this.props; return ( <TextInput ref="input" style={[{ height:this.state.height }, style]} multiline {...props} onChange={this.handleChange} />); } } Input.propTypes = { style: React.PropTypes.number, onChange: React.PropTypes.func, defaultHeight: React.PropTypes.number, };

1 个答案:

答案 0 :(得分:0)

我仍然没有找到一种方法让onChange仍被调用,但我确实找到了解决方案。

解决方案是创建另一个函数来调用setNativeProps并重置状态

 resetInputText() {
    this.refs.input.setNativeProps({ text: '' });
    this.setState({
      height: this.props.defaultHeight,
    });
  }

从我的其他组件中,我可以调用this.refs.input.resetInputText();并查看所需的结果。