簡體   English   中英

如何在本機反應中只渲染一次警報組件?

[英]How can I render only once an Alert component in react native?

如果我的dashboardScreen 被多次渲染,我如何才能在本機反應中只渲染一次Alert 組件?

我正在使用 Context api,如果我調度一個動作它會導致另一個渲染,如果我使用一個 useState 它會導致另一個渲染/渲染,任何想法都會非常感激。

**AppContext.js**
export const AppContext = createContext();

export const AppProvider = ({ children })=> { 

const [ state, dispatch ] = useReducer( appReducer, appInicialState);

 return (
        <AppProvider.Provider value={{
            ...state,
        }}>
            { children }
        </AppProvider.Provider>
    )

}

**Dashboard.js**
export const Dashboard = () => {
 const { state, dispatch } = useContext( AppContext );
 const [showAlert, setShowAlert] = useState(true);

 const handleCancelPressed = () => {
      dispatch({ 
            type: 'cancelPressed',
            payload: {
                userInfo: false,
            }
        });
 }

 const handleAcceptPressed = () => {
      dispatch({ 
            type: 'acceptPressed',
            payload: {
                userInfo: true,
            }
        });
 }

 return (
  <View style={styles.container}>
    {showAlert && (
         Alert.alert(
    "Alert Title",
    "My Alert Msg",
    [
      {
        text: "Cancel",
        onPress: handleCancelPressed,
      },
 {
        text: "Ok",
        onPress: handleAcceptPressed ,
      },
    ],
    {
      cancelable: true,
    }
  );
    )}
  </View>

)}

useEffect是一種可以解決您的問題的方法,只需渲染一次。

const [showAlert, setShowAlert] = useState(null);

useEffect(()=>{setShowAlert(true)},[])

空括號表示“showAlert”的值將只設置一次。

您應該詳細閱讀 useEffect 以正確實現這一點。

我沒有在任何編碼環境中嘗試這個示例,我只分享了一個概念證明供您使用。

希望這可以幫助,

問候, 沙米爾·烏丁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM