对原住民的新react . 我使用上下文挂钩状态在应用程序的两个选项卡屏幕中使用array.

其中一个屏幕以FlatList的形式显示上下文数组,另一个屏幕将项插入到数组中.当数组更改时,正确的重新呈现方式是什么?

代码如下:

APP.JS

 const App = () => {

   const Tab = createBottomTabNavigator();

   return(
 
   <NavigationContainer>
       <Tab.Screen name="HomeScreen"  component={Home} />
       <Tab.Screen name="DiscoverScreen" component={Discover} />
   </NavigationContainer>

  );
}


export default function AppWrapper() {
  return (
    <AuthProvider>
      <App />
    </AuthProvider>
  );
 }

AUTHCONTEXT.JS

 const AuthContext = createContext()

 const AuthProvider = ({ children }) => {

 const [array, setArray] = useState([]);

 return (
     <AuthContext.Provider value={{ array, setArray }}>
        {children}
     </AuthContext.Provider>
  )
 }

 export {AuthContext, AuthProvider}

♪Home.JS♪

export default Home = () => {

  const {array} = useContext(AuthContext);

  return(

     <View>
        <FlatList 
          data={array}
          renderItem={(item)=>{ 
          return(
             <Text>{item}</Text>
          )}}
          />
     </View>

    )
  }

DISCOVER.JS

 export default Discover = () => {

 const {setArray} = useContext(AuthContext);

 setArray((currentArray)=>[...currentArray,'test']);

 return(
    <View></View>
 );
}

推荐答案

Discover函数组件中不应该无条件调用setArray.如果组件出现时需要给array加值,可以使用useEffect钩子(别忘了设置第二个参数,很可能是空数组,否则就会陷入无限循环,组件崩溃并出错)

 export default Discover = () => {

 const {setArray} = useContext(AuthContext);

 useEffect(() => {
   setArray((currentArray)=>[...currentArray,'test']);
 }, [])
 
 return(
    <View></View>
 );
}

而且您不需要担心重新呈现组件,Reaction会为您处理此问题.一旦setArray被调用,它就会自动重新呈现使用AuthContext的所有组件及其子组件.

Reactjs相关问答推荐

Reaction Native:在初始获取后,Reducer变为未定义

For循环中的元素在Reaction中丢失挂钩

以下代码是否存在安全问题?

生成Reaction Vite应用程序的停靠容器时无法识别环境变量

每次单击按钮时,Reaction组件都会重新生成

当我try 部署我的Reaction应用程序时,为什么在此PrevState语句中收到语法错误?

无法使用 Suspense 和 Await 获取数据

React Native 背景动画反转

字段是必需的,当它没有定义时

如何在 React.js 中提取 PDF 的内容?

即使配置了 webpack.config.js,html-loader 也不起作用

React v6 中的公共和私有路由

我可以更改 styled() 中的响应吗? (MUI v5)

如何在react 中正确销毁上下文?

react 事件顺序

具有自动完成功能的 Formik material ui 无法按预期工作

React Router 6.4CreateBrowserRouter子元素不显示

将 Material UI 菜单渲染为

react-query、react-hook-form 和表单验证

单击当前子div时如何更改p标签的图像和样式?react