如何在反应中使用上下文 api 将数据从子组件更新到父组件?

How to update data from child component to parent component using context api in react?

我有两个组件 app.js 和 posts.js。

我的app.js组件

import React, { createContext, useState } from 'react'
import Posts from './components/Posts'

const val = createContext()

const App = () => {
  const msg = 'hi'

  return (
    <div>
      <val.Provider value={msg}>
        <Posts />
      </val.Provider>
    </div>
  )
}

export default App
export { val }

我的Posts.js组件

import React from 'react'
import { val } from '../App'
import { useContext } from 'react'

const Posts = () => {
  const greet = useContext(val)
  return <div>{greet}</div>
}

export default Posts

我想更新来自 'hi' 的 msg 以让来自 Posts 组件的 'hello' 但我不知道如何完成,有人可以帮助我理解包括流程价值观如何改变?我 谢谢

msg 需要状态:

const App = () => {
  const state = useState('hi')

  return (
    <div>
      <val.Provider value={state}>
        <Posts />
      </val.Provider>
    </div>
  )
}

然后:

const Posts = () => {
  const [greet,setGreet] = useContext(val)
  return (
    <>
      <div>{greet}</div>
      <button onClick={() => setGreet('hello')}>Change to hello</button>
    </>
  )
}

将上下文视为您不想一直传递下去的远在天边的支柱是有帮助的。这很有用,因为仅此而已。

使用上下文而不是道具的原因:

你必须通过很多组件将它传递下去,其中一些确实与该道具没有任何关系

使用上下文的原因:

您正在将您的组件与该上下文紧密耦合。

由您决定紧耦合的权衡是否值得。有时是,有时不是。没有硬性规定。