Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 如何在函数中刷新屏幕?_React Native_React Hooks_React Native Android_React Native Navigation_Asyncstorage - Fatal编程技术网

React native 如何在函数中刷新屏幕?

React native 如何在函数中刷新屏幕?,react-native,react-hooks,react-native-android,react-native-navigation,asyncstorage,React Native,React Hooks,React Native Android,React Native Navigation,Asyncstorage,我希望能够从平面列表中删除元素。我无法在ItemView中使用TouchableOpacity的onPress,因此我决定使用onPress={botClick}创建一个按钮,因此当我填充该按钮上方的TextInput时,它会从AsyncStorage中删除该元素,然后该元素也会从proddata中删除。我的问题是,要看到从平面列表中删除的元素,我必须将导航屏幕更改为另一个,然后返回以查看所反映的更改。我是否可以在botClick()中添加一些内容,以便在调用函数时自动刷新或重新充电屏幕,而无需

我希望能够从平面列表中删除元素。我无法在ItemView中使用TouchableOpacity的onPress,因此我决定使用onPress={botClick}创建一个按钮,因此当我填充该按钮上方的TextInput时,它会从AsyncStorage中删除该元素,然后该元素也会从proddata中删除。我的问题是,要看到从平面列表中删除的元素,我必须将导航屏幕更改为另一个,然后返回以查看所反映的更改。我是否可以在botClick()中添加一些内容,以便在调用函数时自动刷新或重新充电屏幕,而无需更改屏幕

export default function TestScreen () {

    const [proddata, setProddata] = useState([]);
    const [deletepar, setDeletepar] = useState('');


    const whenClick = () => {
      console.log("hello");
    }

    async function botClick(){

      try {
        await AsyncStorage.removeItem(deletepar);
        console.log("Removed");
        //Add something here that refreshes or recharges the screen
      }
      catch(exception) {
      }

    };

    const ItemView = ({item}) => {
      return (
        <TouchableOpacity onPress={whenClick}>
          <View>
            <Text>
              {item[0]+ '  ' + item[1]}
            </Text>
          </View>
        </TouchableOpacity>
      );
    };

    async function carInState() { 
      const keys = await AsyncStorage.getAllKeys();  
      const result = await AsyncStorage.multiGet(keys);  
      setProddata([...proddata, ...result]);
    }


    useFocusEffect(
      React.useCallback(() => {
          carInState();        
      }, [])
    );


    return (
      <View>
        <View>
          <TextInput placeholder="..." onChangeText={(val) => setDeletepar(val)}/>
          <View>
            <Button title="Delete" onPress={botClick}/>
          </View>
        </View>
        <FlatList
        data={proddata}
        renderItem={ItemView}
        keyExtractor={(item, index) => index.toString()}
        />

      </View>
    );
};
导出默认函数测试屏幕(){
const[proddata,setProddata]=useState([]);
const[deletepar,setDeletepar]=useState(“”);
常量whenClick=()=>{
console.log(“你好”);
}
异步函数botClick(){
试一试{
等待AsyncStorage.removeItem(deletepar);
控制台日志(“删除”);
//在此处添加刷新或重新充电屏幕的内容
}
捕获(例外){
}
};
const ItemView=({item})=>{
返回(
{item[0]+''+item[1]}
);
};
异步函数carInState(){
const keys=await AsyncStorage.getAllKeys();
const result=await AsyncStorage.multiGet(键);
setProddata([…proddata,…result]);
}
聚焦效应(
React.useCallback(()=>{
carInState();
}, [])
);
返回(
setDeletepar(val)}/>
index.toString()}
/>
);
};

您可以直接操作状态或重新获取所有数据,这不是问题

异步函数botClick(){ 试一试{ 等待AsyncStorage.removeItem(deletepar); //1)再次加载变量数据并调用setProddata const keys=await AsyncStorage.getAllKeys(); const result=await AsyncStorage.multiGet(键); setProddata([…结果]); //2)或者您可以将其从列表中删除 setProddata(prevProddata=>prevProddata.filter(value=>value.x.x!==deletepar)) }捕获(异常){} }
工作正常。非常感谢你!!