You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从BottomSheetBtn组件修改UserInksBottomSheet的isOpen状态

解决方法:通过Props传递状态更新函数

要让子组件BottomSheetBtn修改父组件UserInksBottomSheet的isOpen状态,核心是把父组件的状态更新逻辑通过props传给子组件,子组件触发调用即可。具体步骤如下:

1. 父组件传递状态更新逻辑给子组件

修改UserInksBottomSheet中BottomSheetBtn的调用,把封装好的状态切换逻辑作为props传入:

import { StyleSheet, Text, View, useState, useRef } from 'react-native';
import BottomSheet, {BottomSheetView} from '@gorhom/bottom-sheet';
import { TextInput } from 'react-native-gesture-handler';
import BottomSheetBtn from './BottomSheetBtn';


export default function UserInksBottomSheet(){
   
   const sheetRef = useRef<BottomSheet>(null);
   const [isOpen, SetIsOpen] = useState(true);
   
   const snapPoints = ['60%','90%'];

   // 封装弹窗状态切换逻辑
   const toggleSheetStatus = () => {
     SetIsOpen(prev => !prev);
     // 可选:结合BottomSheet的ref同步控制弹窗显示
     // isOpen ? sheetRef.current?.close() : sheetRef.current?.expand();
   }

   return(
      <BottomSheet
         ref={sheetRef}
         snapPoints={snapPoints}
         // 根据isOpen状态设置弹窗当前的展开位置
         index={isOpen ? 1 : -1}
      >
         <BottomSheetView style={styles.container}>
            BOTTOMSHEET CONTENT
            {/* 把切换函数传给子组件 */}
            <BottomSheetBtn onToggle={toggleSheetStatus} />
         </BottomSheetView>
      </BottomSheet>
   );
}

2. 子组件接收props并触发状态更新

修改BottomSheetBtn组件,接收父组件传来的onToggle属性,在点击事件中调用它:

// BottomSheetBtn.jsx
import { TouchableOpacity, Text, StyleSheet } from 'react-native';

export default function BottomSheetBtn({ onToggle }) {
  return (
    <TouchableOpacity 
      style={styles.btn}
      onPress={onToggle}
    >
      <Text style={styles.btnText}>切换弹窗状态</Text>
    </TouchableOpacity>
  );
}

const styles = StyleSheet.create({
  btn: {
    padding: 12,
    backgroundColor: '#2196F3',
    borderRadius: 8,
    marginTop: 16,
  },
  btnText: {
    color: '#fff',
    textAlign: 'center',
    fontSize: 16,
  }
});

补充:结合@gorhom/bottom-sheet原生控制

如果你需要确保isOpen状态和弹窗实际显示完全同步,可以借助组件的ref调用库自带方法:

  • 关闭弹窗:sheetRef.current?.close()
  • 展开到最大高度:sheetRef.current?.expand()
  • 切换到指定snap点:sheetRef.current?.snapToIndex(0)(对应60%的位置)

内容的提问来源于stack exchange,提问作者Neyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:18:36