【问题标题】:on reload .map is not a function reactjs重新加载 .map 不是函数 reactjs
【发布时间】:2018-03-13 13:39:09
【问题描述】:

所以我在数组的 .map 内使用材质 ui 组件,如果我尝试更改 .map 显示的值之一,它会使我的应用程序崩溃并说 .map 不是函数,为什么会这样? ?我将在下面显示我的代码。

<div className="box-container">
      {this.props.appState.ApplicationPK === '' ? '' :
        this.state.AddressesPOne.map(function (address, index) {
          return (
            value === index && <TabContainer key={index}>
                <h1>Address: {address.AddressPK}</h1>
                <FormControl className={classes.formControl}>
                  <TextField
                    id="Street"
                    label="Street"
                    type="Street"
                    value={self.state.AddressesPOne[index].Street}
                    className={classes.input}
                    onBlur={self.props.handleChangeAddress(index, 0, 'Street')}
                    onChange={self.handleChangeAddress(index, 0, 'Street')}
                    name="Street"
                  />
                </FormControl>
                <FormControl className={classes.formControl} >
                  <TextField
                    id="District"
                    label="District"
                    type="District"
                    value={self.state.AddressesPOne[index].District}
                    className={classes.input}
                    onBlur={self.props.handleChangeAddress(index, 0, 'District')}
                    onChange={self.handleChangeAddress(index, 0, 'District')}
                    name="District"
                  />
                </FormControl>
                <FormControl className={classes.formControl} >
                  <TextField
                    id="Town"
                    label="Town"
                    type="Town"
                    value={self.state.AddressesPOne[index].Town}
                    className={classes.input}
                    onBlur={self.props.handleChangeAddress(index, 0, 'Town')}
                    onChange={self.handleChangeAddress(index, 0, 'Town')}
                    name="Town"
                  />
                </FormControl>
                <FormControl className={classes.formControl} >
                  <TextField
                    id="County"
                    label="County"
                    type="County"
                    value={self.state.AddressesPOne[index].County}
                    className={classes.input}
                    onBlur={self.props.handleChangeAddress(index, 0, 'County')}
                    onChange={self.handleChangeAddress(index, 0, 'County')}
                    name="County"
                  />
                </FormControl>
                <FormControl className={classes.formControl} >
                  <TextField
                    id="Postcode"
                    label="Postcode"
                    type="Postcode"
                    value={self.state.AddressesPOne[index].Postcode}
                    className={classes.input}
                    onBlur={self.props.handleChangeAddress(index, 0, 'Postcode')}
                    onChange={self.handleChangeAddress(index, 0, 'Postcode')}
                    name="Postcode"
                  />
                </FormControl>
                <FormControl className={classes.formControl}>
                  <InputLabel htmlFor="ResidentialStatusFK-Dropdown">Title</InputLabel>
                  <Select
                    native
                    value={self.state.AddressesPOne[index].ResidentialStatusFK}
                    onChange={self.handleChangeAddress(index, 0, 'ResidentialStatusFK')}
                    onBlur={self.props.handleChangeAddress(index, 0, 'ResidentialStatusFK')}
                    input={<Input id="ResidentialStatusFK-Dropdown" />}
                  >
                    <option value="" />
                    <option value="1">Home Owner</option>
                    <option value="2">Renting</option>
                    <option value="3">Living With Parents</option>
                  </Select>
                </FormControl>
                <FormControl className={classes.formControl}>
                  <TextField
                    id="date"
                    label="Date Moved In"
                    type="date"
                    defaultValue={self.state.AddressesPOne[index].DateMovedIn.split('T')[0]}
                    onChange={self.handleChangeAddress(index, 0, 'DateMovedIn')}
                    onBlur={self.props.handleChangeAddress(index, 0, 'DateMovedIn')}
                    className={classes.textField}
                    InputLabelProps={{
                      shrink: true,
                    }}
                  />
                </FormControl>
                <FormControlLabel
                  control={
                    <Checkbox
                      checked={self.state.AddressesPOne[index].IsCurrentAddress}
                      onChange={self.handleChangeCheck('IsCurrentAddress')}
                      value="IsCurrentAddress"
                    />
                  }
                  label="Current Address"
                />
              </TabContainer>
          );
        })}
    </div>

handleChangeAddress = (addressIndex, personIndex, field) => event => {
    const Addresses = Object.assign({}, this.state.AddressesPOne);
    Addresses[addressIndex][field] = event.target.value;
    this.setState({
      AddressesPOne: Addresses,
    });
};

这是代码,由于某种原因,在您更改数据后它会重新加载并说 .map 不是一个函数开发人员,他不知道发生了什么。

【问题讨论】:

    标签: javascript reactjs material-ui jsx


    【解决方案1】:

    您需要在句柄更改中创建新数组而不是新对象。所以改变

    const Addresses = Object.assign({}, this.state.AddressesPOne);
    

    const Addresses = Object.assign([], this.state.AddressesPOne);
    

    【讨论】:

      【解决方案2】:

      handleChangeAddress 中,您将Addresses 设置为具有Object.assign() 的对象,然后将该对象设置为状态。对象没有.map 方法。

      如果您生成并返回了一个数组,这应该可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 2023-03-03
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多