Giter Site home page Giter Site logo

Comments (12)

mehmetsalihyaldiz avatar mehmetsalihyaldiz commented on May 26, 2024 12

Before
<ToastProvider> <RestOfYourApp /> <ToastProvider/>

After
<ToastProvider> <RestOfYourApp /> </ToastProvider>

from react-native-toast-notifications.

omeranar1 avatar omeranar1 commented on May 26, 2024 2

I have the same issue

          <StatusBar backgroundColor={'#1976d2'} />
          <Provider store={store}>
          <ToastProvider>
            <NavigationContainer>
              <AppStack />
            </NavigationContainer>
            </ToastProvider>
          </Provider>
      <ToastProvider>
        <StatusBar backgroundColor={'#1976d2'} />
        <Provider store={store}>
          <NavigationContainer>
            <AppStack />
          </NavigationContainer>
        </Provider>
      </ToastProvider>

dont use;

   useEffect(() => {
     toast.show("Hello World")
   }, [])

use;

      <Button
        title='Show toast'
        onPress={showToast}
      />

from react-native-toast-notifications.

itsramiel avatar itsramiel commented on May 26, 2024 2

The issue is that on the first render the toast object is an empty object and only after a the useEffect is ran, the empty object is replaced with an object that contain the methods also as a state, so your component needs to rerender to get the new object which hold the methods. You can see from this code how it is initially an empty object at first and then it is populated. This from the source code

import React, { FC, useEffect, useRef, useState } from "react";
import ToastContext from "./context";
import Toast, { Props } from "../toast-container";

const ToastProvider: FC<Props> = ({ children, ...props }) => {
  const toastRef = useRef(null);
  const [refState, setRefState] = useState({});

  useEffect(() => {
    setRefState(toastRef.current as any);
  }, []);

  return (
    <ToastContext.Provider value={refState as any}>
      {children}
      <Toast ref={toastRef} {...props} />
    </ToastContext.Provider>
  );
};

export default ToastProvider;

I would have opened a pull request to address this but I have already opened a pull request to fix components under toast not being able to be pressed, but the author seems to be inactive

from react-native-toast-notifications.

WyattSmithTritium avatar WyattSmithTritium commented on May 26, 2024 1

Also having this problem. I have a toast instance for each screen and it works everywhere except my splash screen.

from react-native-toast-notifications.

nikki-cat avatar nikki-cat commented on May 26, 2024 1

I have the same issue

from react-native-toast-notifications.

ailouranada avatar ailouranada commented on May 26, 2024 1

I had the same issue. This solved the problem. Wrap your components inside App.js with ToastProvider

from react-native-toast-notifications.

brunomacedo avatar brunomacedo commented on May 26, 2024 1

I also had the same issue. Move the StatusBar to outside the ToastProvider and it works well.

  • Before
<ToastProvider>
    <HomeScreen />
    <StatusBar style="auto" />
</ToastProvider>
  • Fixed
<>
    <ToastProvider>
        <HomeScreen />
    </ToastProvider>
    <StatusBar style="auto" />
</>

from react-native-toast-notifications.

ailouranada avatar ailouranada commented on May 26, 2024

Guys thank you so much for the great library! Please can you help me with this error))

Current behaviour

The app crashes with error:

toast.show is not a function. (In 'toast.show('Hello World')', 'toast.show' is undefined

After the app launching get render error.

Expected behaviour

Expect app is not crashing and notification is appearing.

Code sample

I use the same code from your example:

import { useToast } from "react-native-toast-notifications";

const Component = () => {
  const toast = useToast();

  useEffect(() => {
    toast.show("Hello World");
  }, []);
};

and before it I wrapped my app.tsx to provider:

  <ToastProvider>
     <RestOfYourApp />
  <ToastProvider/>

Screenshots (if applicable)

What have you tried

Your Environment

software version
ios or android both platform
react-native 0.64
react-native-toast-notifications 3.2.3
node 14.18.3
yarn 1.22.17
Simulator Screen Shot - iPhone 8 - 2022-03-22 at 08 46 57

I had the same issue. This solved the problem. Wrap your components inside App.js with ToastProvider

from react-native-toast-notifications.

rogerkerse avatar rogerkerse commented on May 26, 2024

It is not great, but I solved it by doing this in typescript

const toast = useToast()

useEffect(() => {
    toast.show?.('Hello World')
}, [toast])

from react-native-toast-notifications.

ShivamJoker avatar ShivamJoker commented on May 26, 2024

It is not great, but I solved it by doing this in typescript

const toast = useToast()

useEffect(() => {
    toast.show?.('Hello World')
}, [toast])

This seems to work but I would like this to be fixed

from react-native-toast-notifications.

notblessy avatar notblessy commented on May 26, 2024

Hey I have same issue, but I solved it by using React.useState() like this:

const toast = useToast()

const [message, setMessage] = useState(null)

useEffect(() => {
    if (message) {
      toast.show(message, {
        type: 'danger'
      })
      setMessage(null)
    }
  }, [toast]);

Now if I set message with string, it will show the toast.

I think this is not a perfect solution but since the author seems to be inactive, this solution works perfectly on me.

from react-native-toast-notifications.

tahola avatar tahola commented on May 26, 2024

I have the issue on some components, my solution is to put the toast in useEffect, that's not clean but it work...

  React.useEffect(() => {
    if (toast) {
      toast.show(message);
    }
  }, [toast]); 

from react-native-toast-notifications.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.