setState在本机反应中无法正常工作

时间:2019-08-22 10:30:38

标签: javascript reactjs react-native

我想创建一个包含多个对象的对象。数据是这样的

dataList = [{inputFieldId: 1, dataField:{...}, data: '120'}, {inputFieldId: 2, dataField:{...}, data: '120'} ]

想要这样的东西。

res = [{1: '120'}, {2: '120'}]

我为此编写了一个代码,但是它只给了我最后的对象数据。

  constructor(){
  super()
  this.state = {
  inputValue:{},
  datalist = [],
  }
  }


   async componentWillMount(){
     for(var key in dataList){
        this.setState({
           inputValue: {
             ...this.state.inputValue,
             [dataList[key].inputFieldId]: dataList[key].data
          }
      })
  }     
}

code output = { 2: '120'}

2 个答案:

答案 0 :(得分:0)

您可以尝试以下代码:

constructor(){
  super()
  this.state = {
    inputValue: {},
    datalist = [],
  }
}


async componentWillMount() {
  const inputValues = [];
  for(var key in dataList) {
    inputValues.push({[dataList[key].inputFieldId]: dataList[key].data});
  }
  this.setState({ inputValue: inputValues });
}

答案 1 :(得分:0)

{}中用 [] 替换 inputValue:{ ...this.state.inputValue,.....} ,并用[dataList[key].inputFieldId]: dataList[key].data{}换成 async componentWillMount(){ for(var key in dataList){ this.setState({ inputValue: [ ...this.state.inputValue, {[dataList[key].inputFieldId]: dataList[key].data} ] }) }

inputValue

但是this.state = { inputValue: [], datalist = [], } 状态应声明为类似数组:

let dataList = [{
  inputFieldId: 1,
  dataField: {},
  data: '120'
}, {
  inputFieldId: 2,
  dataField: {},
  data: '120'
}]

let inputValue = []

for (var key in dataList) {

  inputValue = [
    ...inputValue,
    {
      [dataList[key].inputFieldId]: dataList[key].data
    }
  ]
}

console.log(inputValue)

纯JS中的示例

[Route("api/[controller]")]
    [ApiController]
    public class TenantsController : ControllerBase
    {

        private readonly TenantContext _context;

        public TenantsController(TenantContext context) => _context = context;

        //GET: /api/tenants
        [HttpGet]
        public ActionResult<IEnumerable<Tenant>> GetTenants()
        {
            return _context.TenantDetails;
        }