首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加动态useState

添加动态useState
EN

Stack Overflow用户
提问于 2022-07-03 08:41:04
回答 1查看 53关注 0票数 -1

I see this link but didn't get any answer for my question

在我的组件中,我有两个选择框和一个that区域,它们拥有指定的状态(由use状态定义)。

所以点击add按钮这个表单一次又一次地创建,我的问题是如何动态地定义新的状态来为动态创建的新选择箱设置它。我的选择框使用react select和它们的代码在这里:

代码语言:javascript
复制
      <div className="mqContainer">
        {[...Array(mqCount)].map((x, i) => (
          <div key={i} className="newMqWrapper mt-4">
            <Row className="mt-4">
              <Col xs={3}>
                <span>milestone</span>
              </Col>
              <Col xs={6}>
                <Select
                  style={{ width: "100px !important" }}
                  defaultValue={mileStoneType}
                  onChange={setmileStoneType}
                  options={MileStoneTypeOption}
                  isMulti={true}
                />{" "}
              </Col>
            </Row>
            <Row className="mt-4">
              <Col xs={3}>
                <span>question text</span>
              </Col>
              <Col xs={8}>
                <Form.Group>
                  <Form.Control
                    placeholder="why so serious?"
                    className=" dirrtl"
                    as="textarea"
                    rows={3}
                  />
                </Form.Group>{" "}
              </Col>
            </Row>
            <Row className="mt-4">
              <Col xs={3}>
                <span>answer type</span>
              </Col>
              <Col xs={6} className="mb-4">
                <Select
                  defaultValue={mileStoneAnswerType}
                  onChange={setmileStoneAnswerType}
                  options={MqAnswerTypeOption}
                />{" "}
              </Col>
            </Row>
          </div>
        ))}
        <Row>
          <Col xs={12} className=" mb-4 mt-4">
            <Button
              onClick={() => setMqCount(mqCount + 1)}
              style={{ width: "100%" }}
              variant="outline-secondary"
            >
              +
            </Button>{" "}
          </Col>
        </Row>
      </div>

EN

回答 1

Stack Overflow用户

发布于 2022-07-03 09:26:22

我希望我能正确理解你的问题。

通常,您会创建一个组件,您可以在其中单独调用useState()。之后,您可以在map()中呈现它。

我试着复制你的结构:

代码语言:javascript
复制
import { useState } from 'react'

const Form = () => {
  const [ mqCount, setMqCount ] = useState(0)

  return (
    <div className='mqContainer'>
      {[ ...Array(mqCount) ].map((x, i) => {
        // TODO: pass your required props here
        return <Item key={i} />
      })}
      <Row>
        <Col className='mb-4 mt-4' xs={12}>
          <Button
            style={{ width: '100%' }}
            variant='outline-secondary'
            onClick={() => setMqCount(mqCount + 1)}
          >
            +
          </Button>{' '}
        </Col>
      </Row>
    </div>
  )
}

const Item = ({ mileStoneType, MileStoneTypeOption, setmileStoneType }) => {
  const [ yourState, setYourState ] = useState('Whatever you want')
  // TODO: replace it with your own state

  return (
    <div key={i} className='newMqWrapper mt-4'>
      <Row className='mt-4'>
        <Col xs={3}>
          <span>milestone</span>
        </Col>
        <Col xs={6}>
          <Select
            isMulti
            defaultValue={mileStoneType}
            options={MileStoneTypeOption}
            style={{ width: '100px !important' }}
            onChange={setmileStoneType}
          />{' '}
        </Col>
      </Row>
      <Row className='mt-4'>
        <Col xs={3}>
          <span>question text</span>
        </Col>
        <Col xs={8}>
          <Form.Group>
            <Form.Control
              as='textarea'
              className=' dirrtl'
              placeholder='why so serious?'
              rows={3}
            />
          </Form.Group>{' '}
        </Col>
      </Row>
      <Row className='mt-4'>
        <Col xs={3}>
          <span>answer type</span>
        </Col>
        <Col className='mb-4' xs={6}>
          <Select
            defaultValue={mileStoneAnswerType}
            options={MqAnswerTypeOption}
            onChange={setmileStoneAnswerType}
          />{' '}
        </Col>
      </Row>
    </div>
  )
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72845052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档