透過下方的範例可以看出參數是一層一層傳遞

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ba1f2516-3862-4475-9b3c-2c67c3359036/_2020-12-04_4.06.54.png

使用useContext

使用useContext需在父層用Provider包覆,這樣被包覆的子層都能取得資料,就能解決上下文問題,不會有中間層接收到不需要使用的資料。

// 父層
import React, { createContext } from 'react'
import Title from '../components/Title'

export const NameContext = createContext()

const App = () => {
const name = "Ian"
	return (
		<NameContext.Provider value={name}>
			<Title />
		</NameContext.Provider>
	)
}

export default App

子層使用useContext接收傳遞的參數

// 接收參數的子層
import React, { useContext } from 'react'
import { NameContext } from '../src/App'

const contextValue = useContext(NameContext) // 這時候就能接收到父層的值,Ian 

const Title = () => {
	return (
		<div>
			what's you name: {contextValue}
		</div>
	)
}

export default Title

codesandbox範例

透過下方範例使用context傳遞資料, App > Demo > Title ,Title組件跳過Demo取得App傳遞的資料

https://codesandbox.io/s/react-context-demo-sl7u8?file=/src/App.jsx

參考:

http://www.ptbird.cn/react-createContex-useContext.html#menu_index_1