【问题标题】:Update State based on Object selection from dropdown menu根据下拉菜单中的对象选择更新状态
【发布时间】:2019-03-28 01:43:28
【问题描述】:

我有一个名为 TaskTypes 的对象,在对象内部它看起来像这样

-LJLQR7lVkbzsxAZC3JI: {code: "Pest & Disease", colour: "0xf2473f", deleted: null, subTypes: {…}} -LJLQR7mZaeBNnEhdHtU: {code: "Health & Safety", colour: "0x8c5de4", deleted: null, subTypes: {…}} -LJLQR7mZaeBNnEhdHtZ: {code: "Structure", colour: "0x6b8e23", deleted: null, subTypes: {…}} -LJLQR7mZaeBNnEhdHtl: {code: "Repairs & Maintenance", colour: "0x66a9fb", deleted: null, subTypes: {…}} -LJLQR7nJdpun5Tugh39: {code: "Reminders", colour: "0xf2bb61", deleted: null, subTypes: null} -LUDgbjHzQpktk34u8-4: {code: "Sample", colour: "0x2196f3", deleted: null, subTypes: {…}} -L_dAY_Aju0IBGwY9VVA: {code: "test", colour: "0x03a9f4", deleted: null, subTypes: null}

第一个随机字符串是对象 ID。

我希望每次选择其中一个对象时更新 taskId 的状态,例如,如果我从下拉列表中选择“Pests & Disease”,则 taskId 将为“-LJLQR7lVkbzsxAZC3JI”

我已经创建了一个函数来实现这一点,但是状态没有被更新。

this.state = { id: "", taskId: null,
               taskSubId: null,
               taskSubSubId: null }

setTaskType = (id: string) => {
        console.log("ID:", id)
        console.log("id.length:", id.length)
        console.log("stateTaskId", (this.state as any).taskId)
        if (id.length > 0) {
            console.log("setTaskTypeFunction", this.props.metadata.TaskTypes)
            this.setState({ id: id, taskId: id, taskSubId: null, taskSubSubId: null, taskType: Object.assign({}, this.props.metadata.TaskTypes[id]) })
        } 
    }

这是我的 JSX

<select className="input-field-slider dropdown w-select" onClick={() => this.setTaskType("")}>
   <option key={taskId} value={taskId}>Select A Category</option>
     {
        Object.keys(taskTypes)
         .sort((a, b) => taskTypes[a].code.toLowerCase() > 
                     taskTypes[b].code.toLowerCase() ? 1 : -1)                                                      
          .map(taskId =>
<option onClick={() => this.setTaskType(taskId)} value={taskId} key={taskId}>{taskTypes[taskId].code}</option>)}
</select>

截至目前,我在下拉列表中显示整个对象(害虫和疾病等),但我的状态没有更新

【问题讨论】:

    标签: reactjs typescript state jsx


    【解决方案1】:

    一些修改可能会有所帮助。

    选择更改处理程序

    setTaskType = (event) => {
      const id = event.target.value;
      // continue with the rest of code
    }
    

    JSX 选择元素

    <select className="input-field-slider dropdown w-select" value={this.state.taskId} onChange={this.setTaskType}>
      <option value=''>Select A Category</option>
        {Object.keys(taskTypes)
          .sort((a, b) => taskTypes[a].code.toLowerCase() > 
                         taskTypes[b].code.toLowerCase() ? 1 : -1)                                                      
          .map(taskId => 
            <option value={taskId} key={taskId}>{taskTypes[taskId].code}</option>
        )}
    </select>
    

    React Docs: select tag阅读更多详情

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 2016-12-09
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多