使用onChange设置功能组件内的状态时,NumberPicker循环

时间:2020-04-09 17:14:45

标签: reactjs numberpicker react-functional-component react-widgets

我正在尝试将react-widgets NumberPicker包装在一个功能组件中,该组件会在onChange触发时更新状态。

当我单击选择器的向上或向下箭头时,它开始闪烁,就好像它是在参考/渲染循环中一样。我将代码简化为以下代码,这些代码可以为我复制错误。

我正在使用React 16.13.1,react-widgets 4.5.0,react-widgets-simple-number 4.1.24

import React, { useState } from 'react';
import NumberPicker from 'react-widgets/lib/NumberPicker';
import simpleNumberLocalizer from 'react-widgets-simple-number';

simpleNumberLocalizer();

export default function TestPicker(props) {
  const [myVar, setMyVar] = useState(5);

  function Picker() {
    return (
      <NumberPicker value={myVar} onChange={setMyVar} />
    );
  }

  return (
    <div>
      <Picker />
    </div>
  );
}

如果我将组件移出函数,则可以正常工作:

import React, { useState } from 'react';
import NumberPicker from 'react-widgets/lib/NumberPicker';
import simpleNumberLocalizer from 'react-widgets-simple-number';

simpleNumberLocalizer();

export default function TestPicker(props) {
  const [myVar, setMyVar] = useState(5);

  return (
    <div>
      <NumberPicker value={myVar} onChange={setMyVar} />
    </div>
  );
}

任何关于为什么它表现不如预期的想法吗?

1 个答案:

答案 0 :(得分:0)

这是因为在第一个代码段中,您定义的状态是针对父组件的,而不是针对子组件的。 而在第二个状态中,状态属于组件本身。

如果您希望第一个代码段起作用,请将状态传递给孩子。

import React, { useState } from 'react';
import NumberPicker from 'react-widgets/lib/NumberPicker';
import simpleNumberLocalizer from 'react-widgets-simple-number';

simpleNumberLocalizer();

export default function TestPicker(props) {
  const [myVar, setMyVar] = useState(5);

  function Picker({ value, setMyVar }) {
    return (
      <NumberPicker value={value} onChange={setMyVar} />
    );
  }

  return (
    <div>
      <Picker value={myVar} setMyVar={setMyVar} />
    </div>
  );
}