如何使用映射 React 从 useState 添加 2 个键?

Posted

技术标签:

【中文标题】如何使用映射 React 从 useState 添加 2 个键?【英文标题】:How to add 2 keys from useState using mapping React? 【发布时间】:2020-03-03 06:57:51 【问题描述】:

我想要做的是在“mktrateestimate”中显示“currgroupinputrate”和“mktratedelta”的添加我想从小处开始,所以我尝试在“mktratedelta”输入字段中输入一些内容,然后应该显示这个输入在 mktrateestimate 但它不显示 mktratedelta 中的输入。如何解决这个问题以及正确的方法是什么?

const [marketEstimateDataBCAssets, setmarketEstimateData] = useState([
    
      name: "Lombard",
      prevgroupinputrate: 0.01,
      currgroupinputrate: 0.02,
      mktratedelta: 0.03,
      mktrateestimate: 0.04
    ,
    
      name: "Other Secured",
      prevgroupinputrate: 0.01,
      currgroupinputrate: 0.02,
      mktratedelta: 0.033,
      mktrateestimate: 0.04
    ,
    
      name: "Unsecured",
      prevgroupinputrate: 0.01,
      currgroupinputrate: 0.02,
      mktratedelta: 0.0333,
      mktrateestimate: 0.04
    
  ]);


  return (
      marketEstimateDataBCAssets.map((item, key) => 
        return (
          <Segment>
            <div> item.name</div>
            <div> item.prevgroupinputrate</div>
            <div> item.currgroupinputrate</div>
            <input
              value=item.mktratedelta
              onChange=e => 
                const newArr = marketEstimateDataBCAssets.map(el => 
                  if (el.name === item.name) 
                    return  ...el, mktratedelta: parseFloat(e.target.value) ;
                  
                  return el;
                );
                console.log(newArr);

                return setmarketEstimateData([...newArr]);
              
            />
            <div> marketEstimateDataBCAssets[key].mktrateestimate</div>
          </Segment>
        );
      ) ```

【问题讨论】:

【参考方案1】:

您应该尝试类似code 的方法。这只是一个开始,您可以从那里继续自己。您应该找到一种方法来管理您受控的input。更多阅读 Uncontrolled Components 和 Controlled Components 反应。在 javascript 中查看 parseFloat。

return (
    <>
      marketEstimateDataBCAssets.map((item, key) => (
        <div key=item.name>
          /* let's name is unique */
          <div> item.name</div>
          <div> item.prevgroupinputrate</div>
          <div> item.currgroupinputrate</div>
          <input
            value=item.mktratedelta
            onChange=e => 
              const newArr = marketEstimateDataBCAssets.map(el => 
                if (el.name === item.name) 
                  return 
                    ...el,
                    mktratedelta: parseFloat(e.target.value),
                    mktrateestimate: (
                      parseFloat(e.target.value) + item.currgroupinputrate
                    ).toFixed(4)
                  ;
                
                return el;
              );
              console.log(newArr);

              return setmarketEstimateData([...newArr]);
            
          />
          <div> item.mktrateestimate</div>
        </div>
      ))
    </>
  );

【讨论】:

感谢您的代码...。您能否告诉我如何将此函数放在主“return”之外,然后从“onChange”调用它,以便我可以重用该函数跨度>

以上是关于如何使用映射 React 从 useState 添加 2 个键?的主要内容,如果未能解决你的问题,请参考以下文章

React useState:如何将三元运算符放在三元运算符中?

React Native:如何从循环中获取值到钩子 useState

如何动态编写 React.useState 函数,以便您可以从 cms 获得尽可能多的输入类型

卡在“无法读取未定义的属性映射”

如何使用钩子进行映射

useState hook如何知道react中的调用上下文