失败的道具类型无效道具'值'

时间:2017-02-21 20:48:38

标签: react-native

我在react-native中引入了Texinput for Search。 以下是代码:

      constructor(props){
        super(props);
        this.state = {
          value : "",
          items: [],
        }

        this.handleHeaderSearch = this.handleHeaderSearch.bind(this);
        this.handleSearchBtn = this.handleSearchBtn.bind(this);
      }
      handleSearchBtn(){

      }
      handleHeaderSearch(){
        if(!this.state.value) return;

  }

<TextInput
  value={this.props.value}
  onChange = {this.props.onChange}
  placeholder={"جستجو"}
  blurOnSubmit={false}
  style={{flex:0.9}}
  returnKeyType="done"
/>

每当我在输入文本输入后运行Android时,我都会看到此警告:

  

&#34;警告失败道具类型无效道具&#39;值&#39;类型&#39;对象&#39;提供给TextInput,期望&#39;字符串&#39;&#34;

3 个答案:

答案 0 :(得分:3)

您将值存储在this.state.value中(或者至少看起来是您的意图),但是您将this.props.value传递给TextInput。

如果你打算将this.props.value传递给TextInput,那么有助于知道传递给这个组件的内容(一级)。

答案 1 :(得分:0)

在某些情况下,当您尝试输入类型为Warning: Failed prop type: Invalid prop value of type number supplied to TextInput, expected string而不是number的值时,会出现您提到的错误或string。 react-native的最佳做法是使用 String() 函数包装输入值,如下所示:

<TextInput
  value={String(this.props.value)}
  onChange = {this.props.onChange}
  placeholder={"جستجو"}
  blurOnSubmit={false}
  style={{flex:0.9}}
  returnKeyType="done"
/>

这是解决问题的方法:警告:道具类型失败:提供给“ TextInput”的类型为“数字”的道具“值”无效,预期为“字符串”。

答案 2 :(得分:0)

我在输入时遇到同样的错误,如果有人使用这样的功能组件,通过将 useState('') 设置为空字符串对我有用(如果 useState 设置为 nullundefined) .

转换 value={String(text)} 对我不起作用,当我尝试将文本值转换为字符串时,它在输入占位符中显示 [object, object]

const HomeContainer = () => {
  const [text, onChangeText] = useState(''); // Just set useState() to empty string ('')
    
        return (
          <>
          <SafeAreaView>
            <ScrollView styles={styles.scrollView}>
            <Text style={styles.welcome}>Verify Faces</Text>
            <Text></Text>
            <View
            style={[
              styles.container,
              {backgroundColor: COLORS.primaryLight}
            ]}>
                <TextInput style={styles.input} value={text} onChange={onChangeText} placeholder='Enter your name' placeholderTextColor = "#000"/>
                <TextInput style={styles.input} value={text} type='email' onChange={onChangeText} placeholder='Enter your email' placeholderTextColor = "#000"/>
              </View>
              <SimpleImagePicker />
            </ScrollView>
          </SafeAreaView>
          </>
        );
}