为了账号安全,请及时绑定邮箱和手机立即绑定

我想将下面的 for 循环转换为 array.map() 但不知道如何

我想将下面的 for 循环转换为 array.map() 但不知道如何

墨色风雨 2022-01-01 18:36:58
OtpInput 是另一个组件,OTPLength 是从父组件获取的道具,是必需的。{    const otp = getOtpValue()    const inputs = []    for (let index = 0; index < OTPLength; index++) {      inputs.push(        <Input          key={index}          focus={activeInput === index}          value={otp[index]}          onChange={handleOnChange}          onKeyDown={handleOnKeyDown}          onInput={handelOnInput}          onInputFocus={onInputFocus}          index={index}          secure={secure}          invalid={invalid}          autoFocus={autoFocus}        />      )    }    return inputs}已经尝试并更改了以下方式,但我只得到一个输入,而不是在 OTPLength 中作为道具传递的值,然后用于创建基于 OTPLength 的新数组。const renderInputs = useMemo(() => {    const otp = getOtpValue()    const inputs = new Array(OTPLength)    return [...inputs].map((_,index) =>            <Input                key={index}                focus={activeInput === index}                value={otp[index]}                onChange={handleOnChange}                onKeyDown={handleOnKeyDown}                onInput={handelOnInput}                onInputFocus={onInputFocus}                index={index}                secure={secure}                invalid={invalid}                autoFocus={autoFocus}              />            )  }, [    getOtpValue,    OTPLength,    activeInput,    handleOnChange,    handleOnKeyDown,    handelOnInput,    onInputFocus,    autoFocus,    invalid,    secure  ])
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

简单地遍历一个空的 Array(),第二个参数是map()指当前索引


    const myArray = [...new Array(OTPLength)].map((obj, i)=> (

      <Input

        key={index}

        focus={activeInput === i}

        value={otp[i]}

        onChange={handleOnChange}

        onKeyDown={handleOnKeyDown}

        onInput={handelOnInput}

        onInputFocus={onInputFocus}

        index={index}

        secure={secure}

        invalid={invalid}

         autoFocus={autoFocus}

       />

));


查看完整回答
反对 回复 2022-01-01
?
aluckdog

TA贡献1847条经验 获得超7个赞

你甚至不需要map(),你可以简单地做:


const inputs = Array.from({length: OTPLength}, (_,i) => 

    <Input 

        key={i} 

        focus={activeInput == i} 

        /* the rest of your props */ 

    />

)

或者,如果您仍然喜欢map():


const inputs = [...Array(OTPLength)].map((_,i) => 

    <Input 

        key={i} 

        focus={activeInput == i} 

        /* the rest of your props */ 

    />

)


查看完整回答
反对 回复 2022-01-01
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

这应该有效,


const renderInputs = useMemo(() => {

const otp = getOtpValue()

const inputs = new Array(OTPLength)

let ret = inputs.map((_,index) =>

        <Input

            key={index}

            focus={activeInput === index}

            value={otp[index]}

            onChange={handleOnChange}

            onKeyDown={handleOnKeyDown}

            onInput={handelOnInput}

            onInputFocus={onInputFocus}

            index={index}

            secure={secure}

            invalid={invalid}

            autoFocus={autoFocus}

          />

        );

        return ret;

 }, [

getOtpValue,

OTPLength,

activeInput,

handleOnChange,

handleOnKeyDown,

handelOnInput,

onInputFocus,

autoFocus,

invalid,

secure

])


查看完整回答
反对 回复 2022-01-01
  • 3 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信