引言

React Native ECharts 是一个用于显示 ECharts 图表的 React Native 库,我是这个开源项目的维护者。开源项目对软件开发生态系统至关重要,为开发者供给名贵的资源和东西。但是,维护和改进这些项目或许具有挑战性,特别是当它们在规模和复杂性方面不断增加。

在本文中,咱们将谈论 GPT,由 OpenAI 开发的强壮言语模型,怎么协助我维护开源项目。咱们将经过在 React Native ECharts 中集成 React Native Gesture Handler 这个事例,来查看 GPT 在答复问题、生成代码、编写文档等方面的才能。

我将在 GPT 体现的智能程度给出我的片面评分,满分为 10 分。

答复问题

评分:10 分

最初,在项目问题谈论中有关于运用 RNGH 替代 PanResponder 的谈论。之前 PanResponder 运转杰出,此问题就被放置了。像这样的开源项目中的问题,假如没有人记得它,或许会永远放置。

假如让 GPT 来为咱们答复问题,将是十分轻松风趣的工作。我将问题内容和一切谈论粘贴到 ChatGPT 中,并询问它怎么答复这个问题。我对它的回应形象十分深刻。它首要表示了对问题反馈的感谢,介绍并比较了 PanResponder 和 react-native-gesture-handler,并像一位经验丰厚的开源项目作者相同提出了处理方案。在我看来仅有的问题,便是有点过于烦琐了。

以下是它的答复:

感谢您的主张,咱们十分重视开发者的反馈。咱们会仔细考虑您主张用 react-native-gesture-handler(RNGH)替换 React Native 内置的 PanResponder。首要,请答应我解说这两个库的优势。

PanResponder 是内置于 React Native 的手势处理库。它能够处理各种手势操作,并与 React Native 结构严密集成。但是,PanResponder 的功用相对有限,对于一些复杂的手势操作或许不行充沛。

另一方面,react-native-gesture-handler 是一个独立的手势处理库,具有更丰厚的功用和更好的功用。它的优势包含:

  1. 更精确的手势辨认和处理:RNGH 能够更精确地辨认和处理各种手势,进步应用程序的交互性。
  2. 更好的功用:RNGH 的功用优于 PanResponder,特别是在处理很多手势操作时。
  3. 更好的跨平台兼容性:RNGH 支撑更多平台,包含 iOS 和 Android。
  4. 更灵活的 API:RNGH 供给了更丰厚的 API,答应开发者自定义手势处理逻辑。

鉴于这些优势,咱们将仔细考虑用 react-native-gesture-handler 替换 PanResponder。咱们将评价现有代码以确认替换成本和潜在问题。此外,咱们将考虑将 react-native-gesture-handler 作为一个选项供给,让开发者依据需要选择手势处理库。

请给咱们一些时刻来评价这个主张。一起,假如您对实现过程有任何主张或主意,请随时在这个问题上发表谈论。咱们将尽快回复并做出决议。再次感谢您的主张!

ChatGPT 在答复问题方面被证明是名贵的资源,由于它能够快速回应并精确了解问题的布景。但是,为模型供给满足的布景信息以生成更精确的答案是至关重要的。

写代码

评分:6 分

接下来,我测验让 ChatGPT 协助编写代码。由于上下文巨细的限制,我将使命简化为 2 个过程:

  1. 将本来运用 PanResponder 实现的手势处理代码转化为由 react-native-gesture-handler 处理。
  2. 经过装备 props,答应用户选择运用 PanResponder 或 react-native-gesture-handler。React-native-gesture-handler 是一个可选依靠项,假如未装置,则降级为 PanResponder。

首要,我将运用 PanResponder 处理手势的完好代码发布到 ChatGPT,并要求将其转化为 react-native-gesture-handler 版别。

它很快给我供给了转化后的代码,解说了代码并给出了运用阐明,看起来十分智能和敏捷。我采用了代码的解说部分,如下:

在这个重写版别中,咱们导入了 react-native-gesture-handler,并运用了 PanGestureHandler 和 PinchGestureHandler。咱们创建了一个名为 GestureHandler 的组件,将手势处理器与相应的事情处理器关联起来。此组件承受一个 zrenderId 属性和一个 children 属性。children 能够是任何需要手势处理的 React 组件。

原始的 PanResponder 实例被替换为 PanGestureHandler,运用 onGestureEvent 和 onHandlerStateChange 事情来处理手势变化。对于缩放功用,咱们引入了 PinchGestureHandler,并为其设置了一个 onPinchGestureEvent 事情处理器。这两个处理器别离负责处理拖动和缩放手势。

为了一起处理拖动和缩放手势,咱们运用 simultaneousHandlers 属性,这样 PanGestureHandler 和 PinchGestureHandler 能够一起处理手势。

现在,要将手势处理应用到组件上,只需将 GestureHandler 组件包裹在该组件周围,并传递 zrenderId 即可。

在简略处理类型过错和小过错后,就能够正常运转了,这太酷了,令人震惊。假如是我自己写,或许需要一个小时!

但是,当我查看了 react-native-gesture-handler 的文档后,我发现:

PanGestureHandler 和 PinchGestureHandler 都即将被弃用的 API,咱们正式主张运用新的手势 API。

当然,这是能够了解的,由于 ChatGPT 的常识库截止日期为 2021 年 9 月,那时状况跟现在不同。

我测验让它运用新的手势 API 编写代码。不幸的是,在没有那部分常识的状况下,它开端猜想怎么运用新的 API,而且并不正确。

在运用 ChatGPT 协助进行任何操作时,您需要坚持一定程度的怀疑情绪。 以下是一部分过错的代码:

// ...
import { PanGesture, PinchGesture } from 'react-native-gesture-handler';
// ...
export const GestureHandler = ({ zrenderId, children }) => {
  const panRef = useRef();
  const pinchRef = useRef();
  const onPanGestureEvent = useMemo(
    () => ({ nativeEvent }) => {
      dispatchEvent(zrenderId, ['mousemove'], nativeEvent, 'change');
    },
    [zrenderId]
  );
  const onPanStateChange = useMemo(
    () => ({ nativeEvent }) => {
      const { state } = nativeEvent;
      if (state === 'began') {
        dispatchEvent(zrenderId, ['mousedown', 'mousemove'], nativeEvent, 'start');
      } else if (state === 'end') {
        dispatchEvent(zrenderId, ['mouseup', 'click'], nativeEvent, 'end');
      }
    },
    [zrenderId]
  );
  // const onPinchGestureEvent = ...
  return (
    <PanGesture
      ref={panRef}
      simultaneousHandlers={pinchRef}
      onGestureEvent={onPanGestureEvent}
      onStateChange={onPanStateChange}
    >
      <PinchGesture
        ref={pinchRef}
        simultaneousHandlers={panRef}
        onGestureEvent={onPinchGestureEvent}
      >
        {children}
      </PinchGesture>
    </PanGesture>
  );
};

然后我向它供给了新手势 API 中 panGesture 和 pinchGesture 运用的演示和文档,并让它重新生成代码。经过几轮调整后,代码终于可用了。能够看出,它从未知常识中了解和学习的才能也很强壮。

紧接着,我告知它我期望 react-native-gesture-handler 成为可选装置的,并且 ChatGPT 体现得十分有用。

在进行了更具体的测试后,依然存在一些问题,我仍是请 ChatGPT 帮我处理它们。整个过程并不顺利,但它依然对我快速定位问题和供给编码主张有协助。

例如,在我的测试中,我发现 panGesture 的 onStart 事情触发较晚。ChatGPT 告知我,这或许是由于 react-native-gesture-handler 需要搜集满足的手势信息来确认手势是否被辨认。在这个过程中会有延迟。为了处理这个问题,咱们能够测验运用 onBegin 替代 onStart,由于 onBegin 在手势处理器开端接纳触摸时就会触发。一起供给了相应的代码,以及或许存在的风险,对我十分有协助。

总的来说,当你能够明晰地描绘你的需求,比如将使命分化得很好并供给满足完好的布景常识时,ChatGPT 将是你的得力助手。

总结修正

评分:9 分

整个过程是经过对话完结的,所以咱们能够很容易地总结出信息。以下是由 ChatGPT 供给的总结,经过少数修正后能够直接运用。

提交信息:

feat: 为可选运用 react-native-gesture-handler 增加支撑

PR 描绘:

本次 PR 在项目中增加了对 `react-native-gesture-handler` 的可选支撑。用户现在能够经过指定 `useRNGH` 参数来选择运用 `react-native-gesture-handler` 处理手势。当 `react-native-gesture-handler` 未装置或 `useRNGH` 设置为 `false` 时,组件将优雅地回退到运用内置平移手势。
更改包含:
- 增加一个 `useRNGH` 参数,以操控是运用 `react-native-gesture-handler` 仍是内置平移手势。
- 处理 `react-native-gesture-handler` 未装置的状况,并将内置平移手势作为回退选项。
- 运用新的装备选项更新示例代码。
此更新进步了组件的灵活性,答应用户依据特定用例选择最佳的手势处理选项。

与 ChatGPT 一起编写 PR 描绘和提交信息是一种顺利的体验。经过供给明晰的指示和输入,模型生成了简洁且信息丰厚的内容,精确反映了项目中所做的更改。

生成文档

评分:9 分

您还能够运用 ChatGPT 生成运用文档,这也十分便利,这儿不再具体阐明。

编写博客文章

评分:7 分

作为流程的最终一步,我请 ChatGPT 帮我编写一篇记载整个阅历的博客文章。这篇博客文章便是这次协作的成果,展示了怎么运用 ChatGPT 草拟连接且引人入胜的内容。

猜猜看这儿有多少内容是由 ChatGPT 生成的。

定论

在整个开发过程中,我学到了几个关于运用 ChatGPT 进行软件开发的重要经验:

  1. 将使命拆分成更小的过程能够显著进步功率。
  2. ChatGPT 的常识库或许过期,因而供给相关信息对于取得精确的代码示例至关重要。
  3. 虽然 ChatGPT 在文本使命方面很有协助,但在实际编码方面仍无法取代人类专业常识。
  4. ChatGPT 就像一个高度智能的助手,在整个项目中供给名贵的咨询和主张。

总归,像 ChatGPT 这样的 AI 言语模型在各种使命中具有巨大的潜力,从规划和编码到文档和内容创建。随着 AI 技术的不断发展,咱们能够期待更强壮、更多功用的东西,这将进一步简化软件开发流程并进步开发者的整体功率。

最终,假如您想在您的 React Native 应用程序中绘制酷炫的图表,请测验咱们的项目。

wuba.github.io/react-nativ…