当前位置: 首页 > 面试题库 >

在使用中反应重写组件WillReceiveProps

吴胜
2023-03-14
问题内容

所以我重新写带钩的分量,我遇到了一个有趣的挑战,我需要模拟天生的一些老问题componentWillReceivePropsuseEffect困境。

我的旧代码如下:

componentWillReceiveProps(nextProps: Props) {

  const prevLateVal = get(`lateMinutes[${bookingId}].value`, this.props);
  const nextLateVal = get(`lateMinutes[${bookingId}].value`, nextProps); //see here, 
//we use next props

  if (typeof nextLateVal !== 'undefined' && prevLateVal !== nextLateVal) {
    client.connect(bookingId, nextLateVal === null ? 0 : nextLateVal);

  }
}

您会看到,我正在const基于nextProps 发起一个a ,然后在if语句中我基于nextVal
进行了几次检查,现在,我知道我们可以指定第二个参数以useEffect仅在prop更改时运行它,那检查,我怎样才能实现类似于nextProps


问题答案:

您可以创建自定义钩子:

function usePrevious(value) {
  const ref = useRef();
  useEffect(() => {
    ref.prevLateVal = value;
  });
  return ref.prevLateVal;
}

并将其用于 useEffect()

const Component = (props) => {
    const currentLateValue = get(`lateMinutes[${bookingId}].value`, props)
    const prevLateVal = usePrevious(currentLateValue);
    useEffect(() => {
        if(prevLateVal !== currentLateValue) {
         // process here
        }
    }, [currentLateValue]) // This will be executed only if currentLateValue changes.
}


 类似资料:
  • 因此,当您用小写第一个字母声明一个组件处于响应状态时,它不会显示,否则会引发错误。当您将组件名称大写时,它确实有效。 它是如何实现的?避免与现有html元素冲突,还是这是一个bug? 当我将更改为时,它可以工作:

  • 我在学反应。我读过一篇文章,建议我们使用函数组件,而不是扩展react.component的类,所以我跟着做了。我也使用箭头函数而不是函数关键字。即: 有没有一种方法可以使用setState()来代替setName()、setId()、…等?或者任何建议? 非常感谢!

  • 问题内容: 我有React表单,其中有一个用于渲染下拉菜单的Component,因为这些选项来自API。但是,我无法访问嵌入式组件的引用。我正在整理我的第一个表格,并试图了解解决此问题的最佳方法。 问题答案: 最好将视为回调属性,并且不再依赖于Object。如果确实使用对象,请避免访问后代组件。您应该将其视为私有访问器,而不应将其视为组件API的一部分。仅将组件实例上公开的方法视为其公共API。

  • 我目前有我的项目文件夹 在我的主页组件中,我试图将整个配置文件目录导入这样一个对象(根据需要动态加载每个组件,但并非所有组件都将加载) 而且 但是我在编译器中得到一个错误,说模块未找到:无法解析“/轮廓 我想明确说明,配置文件是一个包含组件的文件夹,我想在我的app.js文件中选择所有要动态调用的组件。 为什么会这样?

  • 问题内容: 我有一个叫做React的组件,有很多子组件(另一个React组件)。我希望能够从内部对每个事件声明一个事件。我尝试执行以下操作: 不用说,我没有得到任何“点击!” 出现在我的控制台中 Chrome中的React检查器会指示事件已注册,并应使用上述功能体进行注册。 因此,我得出结论,我无法在实际标签上注册事件(不过,我不确定为什么会这样)。我如何才能实现这一目标呢? 问题答案: 这取决于

  • 我有一个类扩展了React。组件类,我将为我希望接收的道具传递我自己的接口。问题是当我使用webstorm linter说有问题,指出类型“typeof SomeComponent”上不存在属性“propTypes”。 我不知道为什么会这样...... 的代码为 当我编写以下代码创建函数组件时,会引发类似的异常: 在本例中,使用