阻止提供状态变化的上下文订户重新 ?我的总体规划的无聊细节?跳过上面的实际问题

问题描述

我正在尝试为我的拙劣的React应用程序实现 Form系统。 我的计划如下:

?我的总体规划的无聊细节

  1. 实现一个useForm钩子,该钩子为我维护表单数据的创建状态提供了多个处理程序。主要是,此钩子导出form本身(它是此useImmerReducer创建的对象)和getValue(其是函数)以进行检索返回的form中的某个值。
  2. 实施Provider一个在其上下文中呈现其所有子级的组件,该上下文的值为useForm输出
  3. 实现一个FormItem来侦听此上下文的值,并通过特定的处理程序包装其子级,以更新在useForm AKA form中实现的状态。

我遇到的问题是,每当我向Form的所有FormItem提供输入时,它们都将重新呈现。后来我进行了更多的挖掘工作,发现我的form是重新呈现(有点惊奇)的主要原因。现在,我只是停留在这一点上,我不知道如何在useForm中管理我的状态并阻止我的所有上下文订户进行不必要的重新渲染。

?跳过上面的实际问题

我将尝试以最清晰的方式来表达我的问题,我基本上是在尝试使已定义的上下文中的子组件提供object(即要订阅data)作为值data中只有一个键。

以下是一些视频来说明我的情况:

我的表格提供者的孩子
<Provider>
  <FormItem fieldKey="username"> // let's call this component Jim
    <TextInput/>
  </FormItem>
  <FormItem fieldKey="password"> // and call this one Jax
    <TextInput/>
  </FormItem>
</Provider>
上下文数据
const data = useContext(MyContext);
/**
 * {
 *   username: 'tacos',*   password: 'most powerful password'
 * }
 */

当我开始输入 Jax 时,如何使 Jim 不重新渲染?反之亦然? 非常感谢任何反馈,谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...