反应本机useState无法自动更新?

时间:2020-09-21 03:19:44

标签: react-native

为什么useState自动更新?我将按下按钮,而不显示textinput。但我可以保存文件而无需更改。将显示textinput。抱歉,我的英语不好

从'react'导入React,{useState,useEffect}; 从'react-native'导入{Text,TextInput,View,Button,};

    const Test = ({navigation}) => {
        const [textInput, settextInput] = useState([]);

        useEffect(() => {
        addTextInput = (key) => {
          
          textInput.push([<TextInput style={{backgroundColor :'#7ACB4A',marginTop:10}} key={key} />]);
        
          settextInput(textInput);
          console.log(textInput); 
          }
        },[textInput]);
          return(
            <View>
            <Button title='+' onPress={() => 
               addTextInput(textInput.length)} />
            {textInput.map((value, index) => {
              return value
            })}
            <Text>{textInput.length}</Text>
          </View>
          );

    }
    export default Test;

1 个答案:

答案 0 :(得分:0)

我有一些建议可以改善您的代码。

  1. 如果未使用'setState',请不要更改状态值。 这本质上是错误的,并会导致错误。

      addTextInput = (key) => {
      textInput.push([<TextInput style={{backgroundColor :'#7ACB4A',marginTop:10}} key={key} />]);
      settextInput(textInput);
      console.log(textInput); 
      }
    
  2. 状态仅包含值,它不应包含其他内容。您应该在地图函数中返回TextInput。

  3. 我尝试重写您的代码,对不起,因为我的英语。希望对您有帮助

代码:

const [textInput, setTextInput] = React.useState(['1', '2'])
const addTextInput = (key: string) => {
    const tempInput = textInput.concat([key])
    setTextInput(tempInput)
}
return (
    <View style={{ alignItems: 'center', justifyContent: 'center', flex: 1 }}>
        <Button title="+" onPress={() => addTextInput(textInput.length.toString())} />
        {textInput.map((value, index) => {
            return (
                <TextInput style={{ backgroundColor: '#7ACB4A', marginTop: 10, width: '70%' }} key={index + ''} />
            )
        })}
        <Text>{textInput.length}</Text>
    </View>
)

}