Bird
Raised Fist0
React Nativemobile~5 mins

Context API in React Native

Choose your learning style10 modes available
Introduction

The Context API helps share data easily across many parts of your app without passing props step-by-step.

You want to share user login info across many screens.
You need a theme (dark or light) to be available everywhere.
You want to manage app language settings globally.
You want to avoid passing the same data through many components.
You want to keep your code clean and simple.
Syntax
React Native
import React, { createContext, useState, useContext } from 'react';

const MyContext = createContext();

function MyProvider({ children }) {
  const [value, setValue] = useState(null);

  return (
    <MyContext.Provider value={{ value, setValue }}>
      {children}
    </MyContext.Provider>
  );
}

function MyComponent() {
  const context = useContext(MyContext);
  // use context.value or context.setValue
}

createContext makes a new context object.

Provider wraps components to share data.

Examples
Create a context with default value 'light'.
React Native
const ThemeContext = createContext('light');
Provide theme state and updater to children.
React Native
function ThemeProvider({ children }) {
  const [theme, setTheme] = useState('dark');
  return <ThemeContext.Provider value={{ theme, setTheme }}>{children}</ThemeContext.Provider>;
}
Consume the theme value inside a component.
React Native
import { Text } from 'react-native';

function DisplayTheme() {
  const { theme } = useContext(ThemeContext);
  return <Text>Current theme is {theme}</Text>;
}
Sample App

This app uses Context API to share a counter value and update functions across components without passing props. The CounterProvider wraps the app and provides the count state. CounterDisplay shows the current count. CounterButtons has buttons to increase or decrease the count.

React Native
import React, { createContext, useState, useContext } from 'react';
import { Text, View, Button } from 'react-native';

const CounterContext = createContext();

function CounterProvider({ children }) {
  const [count, setCount] = useState(0);
  return (
    <CounterContext.Provider value={{ count, setCount }}>
      {children}
    </CounterContext.Provider>
  );
}

function CounterDisplay() {
  const { count } = useContext(CounterContext);
  return <Text>Count: {count}</Text>;
}

function CounterButtons() {
  const { setCount } = useContext(CounterContext);
  return (
    <View>
      <Button title="Increase" onPress={() => setCount(c => c + 1)} />
      <Button title="Decrease" onPress={() => setCount(c => c - 1)} />
    </View>
  );
}

export default function App() {
  return (
    <CounterProvider>
      <View style={{ padding: 20 }}>
        <CounterDisplay />
        <CounterButtons />
      </View>
    </CounterProvider>
  );
}
OutputSuccess
Important Notes

Always wrap components that use context inside the Provider.

Context is great for global data but avoid overusing it for local states.

Use descriptive names for your context to keep code clear.

Summary

Context API shares data easily across many components.

Use createContext, Provider, and useContext together.

It helps avoid passing props through many layers.

Practice

(1/5)
1. What is the main purpose of React Native's Context API?
easy
A. To share data easily across many components without passing props manually
B. To style components with CSS
C. To handle navigation between screens
D. To fetch data from a server

Solution

  1. Step 1: Understand Context API's role

    Context API is designed to share data globally in a React app without passing props through every level.
  2. Step 2: Compare options

    Only To share data easily across many components without passing props manually describes this purpose. Others relate to styling, navigation, or data fetching, which are unrelated.
  3. Final Answer:

    To share data easily across many components without passing props manually -> Option A
  4. Quick Check:

    Context API = Share data easily [OK]
Hint: Context API shares data without prop drilling [OK]
Common Mistakes:
  • Confusing Context API with styling or navigation
  • Thinking it fetches data from servers
  • Believing it replaces all props usage
2. Which of the following is the correct way to create a context in React Native?
easy
A. const MyContext = React.useContext();
B. const MyContext = createContext();
C. const MyContext = React.createContext();
D. const MyContext = new Context();

Solution

  1. Step 1: Recall correct syntax for creating context

    React Native uses React.createContext() to create a new context object.
  2. Step 2: Analyze options

    const MyContext = React.createContext(); uses the full correct syntax. const MyContext = createContext(); misses React prefix. new Context(); uses invalid constructor. React.useContext(); calls useContext which is a hook, not for creation.
  3. Final Answer:

    const MyContext = React.createContext(); -> Option C
  4. Quick Check:

    Create context = React.createContext() [OK]
Hint: Use React.createContext() to create context [OK]
Common Mistakes:
  • Omitting React prefix
  • Using new Context() which doesn't exist
  • Confusing useContext hook with createContext
3. Given this code snippet, what will be the output displayed by ChildComponent?
const MyContext = React.createContext('Default');

function Parent() {
  return (
    
      
    
  );
}

function ChildComponent() {
  const value = React.useContext(MyContext);
  return {value};
}
medium
A. Default
B. Error: useContext called outside provider
C. undefined
D. Hello

Solution

  1. Step 1: Identify the Provider value

    The sets the value to "Hello" for all children inside it.
  2. Step 2: Check useContext usage in ChildComponent

    ChildComponent uses React.useContext(MyContext) which reads the nearest Provider's value, which is "Hello".
  3. Final Answer:

    Hello -> Option D
  4. Quick Check:

    useContext reads Provider value = Hello [OK]
Hint: useContext reads nearest Provider value [OK]
Common Mistakes:
  • Thinking default value is used when Provider exists
  • Assuming undefined if value is string
  • Confusing error with missing Provider
4. What is wrong with this React Native Context usage?
const MyContext = React.createContext();

function Parent() {
  return (
    
      
    
  );
}

function Child() {
  const value = React.useContext();
  return {value};
}
medium
A. createContext requires an initial value
B. useContext is called without passing the context object
C. Provider is missing a value prop
D. Child component should not use useContext

Solution

  1. Step 1: Check useContext call in Child

    useContext must be called with the context object as argument, e.g., React.useContext(MyContext).
  2. Step 2: Verify other parts

    Provider has a value prop "Hi" which is correct. createContext can be called without initial value (undefined default). Child can use useContext.
  3. Final Answer:

    useContext is called without passing the context object -> Option B
  4. Quick Check:

    useContext needs context argument [OK]
Hint: Always pass context to useContext() [OK]
Common Mistakes:
  • Calling useContext() with no arguments
  • Thinking createContext must have initial value
  • Believing Provider can omit value prop
5. You want to share a user object across multiple nested components without passing props. Which steps correctly use Context API to achieve this? A) Create context with React.createContext(), wrap components with Provider passing user as value, use useContext in children. B) Pass user as props to every component manually. C) Use useState in every component to store user. D) Use React.createContext() but do not wrap components with Provider.
hard
A. Create context, wrap with Provider passing user, use useContext in children
B. Pass user as props manually to each component
C. Use useState in every component to store user
D. Create context but do not wrap with Provider

Solution

  1. Step 1: Identify correct Context API usage

    To share data globally, create context, wrap components with Provider passing data, and consume with useContext.
  2. Step 2: Eliminate incorrect options

    B passes props manually, not using Context API. C duplicates state unnecessarily. D creates context but no Provider means default or undefined value.
  3. Final Answer:

    Create context, wrap with Provider passing user, use useContext in children -> Option A
  4. Quick Check:

    Context API = create + Provider + useContext [OK]
Hint: Use createContext + Provider + useContext to share data [OK]
Common Mistakes:
  • Skipping Provider wrapping
  • Passing props manually instead of using context
  • Using useState in every component unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard