javascript - React setState 异步导致下拉延迟

标签 javascript reactjs

我试图用默认值制作一个下拉列表。

因此,例如,它在开头显示“年”,点击后用户应该看到 1987 作为默认值。

所以我有 this.setState 来操作下拉列表的默认值。

我在台式机和 Android 手机上运行良好。

但是当我使用 iPhone 时,Chrome 和 Safari 都不能很好地工作。(我第一次点击时显示年份,再次点击后显示 1987)


class MobileBind extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      birthYear: '',
      defaultYear: true,
    };


  }

  render() {
    const {
      birthYear,
   } = this.state;

    const createNumberSet = (min = 0, max = 10) => {
      if (min > max)
        return [];

      return Array(max - min + 1)
        .fill(min)
        .map((value, index) => value + index)
        .filter(value => value >= min);
    };

    const currentYear = moment().year();
    const years = createNumberSet(currentYear - 100, currentYear);
    const months = createNumberSet(1, 12);
    const days = createNumberSet(1, 31);

    return (
             <div className={style['birth-date-input']} style={{ margin: 0 }}>
                <FormControl>
                  <Select name="birthYear"
                    defaultValue={birthYear}
                    onChange={this.handleChange}
                    onClick={this.handleDefalutYear}
                    native>
                    {
                      [
                      <option key="birthYear-default" value="" disabled >
    Year</option>,
                      ...(years || []).map(value => <option key={`birthYear-${value}`} value={value} >{value}</option>)
                      ]
                    }
                  </Select>
                </FormControl>
              </div>

  }


  handleChange = event => {
    const target = event.target;
    const value = target.type === 'checkbox' ? target.checked : target.value;
    const name = target.name;

    this.setState({ [name]: value });
  }

  handleDefalutYear = () => {
      this.setState({defaultYear:false});
  }



我希望可以立即更改默认值(只需单击一次!`)

最佳答案

使用 defaultValue 是为了播种不受控制的组件。由于您正在控制组件(您有一个 onChange 并且您正在将 value 设置为 state),因此将 birthYear 传递给 value 属性,而不是 defaultValue

关于javascript - React setState 异步导致下拉延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55540621/

相关文章:

reactjs - 每次渲染时获取组件的高度

reactjs - Nextjs 中的路由器

javascript - jQuery getJSON 回调的顺序?

javascript - 如何从对象内部获取属性名称以创建新的属性名称?

html - 何时使用 React 16 门户

javascript - 尽管从 res.data 分配值,状态值仍为空

javascript - TypeError : Object(. ..) 不是函数 React S3

javascript - Backbone.js 中的模型

javascript - typescript -对象作为私有(private)或 protected

javascript - 将 div 向下滑动到页面中间