简体   繁体   English

如何在反应中将值设置为 const

[英]How to set value to const in react

 const CreateNewTab = () => {
      const priceMap = {};
      retrun(
          <Form>
                 <Form.Item
                  label="Price Map"
                  name="priceMap"
                  rules={[{ required: true, message: "Please input Prices!"}]}>
                             
                              {selectedProducts.flatMap(productId => products
                                  .filter(product => product.id === productId)
                                  .map(product => (
                                      <Input.Group compact>
                                          <Form.Item label={product.productName + " : "} />   
                                          {product.priceList.map((priceObj) => (
                                              <Form.Item
                                                  label={priceObj.type}
                                                  key={priceObj.priceId}>
                                                  <Input defaultValue={priceObj.price}
                                                      rules={[{ required: true, message: "Please input price!" }]}
                                                      onChange={(changedValues) => { priceMap[priceObj.id] = changedValues[Object.keys(changedValues)[0]]; console.log(priceMap) }} />
                                                  </Form.Item>
                                             
                                          ))}
                                      </Input.Group>

                                  ))
                             )}
                                 
                </Form.Item>
           </Form>
)

I want to track the priceMap for example例如,我想跟踪 priceMap

 "priceMap": {
                "3": 2,
                "4": 5,
                "10": 2,
                "11": 5,
                "12": 2,
                "13": 5
            }

However, the error says Assignment to constant variable.但是,错误说分配给常量变量。

I have tried const [priceMap, setpriceMap] = useState([]);我试过 const [priceMap, setpriceMap] = useState([]); but it only sets single value to priceMap.但它只为 priceMap 设置单个值。

Instead, I want to create priceMap as key value json object.相反,我想创建 priceMap 作为键值 json 对象。

setState is definitely the right thing to do. setState绝对是正确的做法。 That is the React hooks way of having data that, when it changes, causes a re-render.这就是 React hooks 获取数据的方式,当数据发生变化时,会导致重新渲染。

I have tried const [priceMap, setpriceMap] = useState([]);我试过 const [priceMap, setpriceMap] = useState([]); but it only sets single value to priceMap.但它只为 priceMap 设置单个值。

Why are you setting priceMap to an Array when you want it to be an Object ?当您希望它是一个Object时,为什么priceMap设置为一个Array Try something like this:尝试这样的事情:

const CreateNewTab = () => {
  const [priceMap, setPriceMap] = useState({});
  return (
    <Form>
      <Form.Item
        label="Price Map"
        name="priceMap"
        rules={[{ required: true, message: "Please input Prices!"}]}
      >
        {selectedProducts.flatMap(productId => products
          .filter(product => product.id === productId)
          .map(product => (
            <Input.Group compact>
              <Form.Item label={product.productName + " : "} />   
              {product.priceList.map((priceObj) => (
                <Form.Item
                  label={priceObj.type}
                  key={priceObj.priceId}
                >
                  <Input
                    defaultValue={priceObj.price}
                    rules={[{ required: true, message: "Please input price!" }]}
                    onChange={(changedValues) => {
                      setPriceMap({
                        ...priceMap,
                        [priceObj.id]: changedValues[Object.keys(changedValues)[0]]
                      })
                    }} />
                </Form.Item>
              ))}
            </Input.Group>
          ))
        )}
      </Form.Item>
    </Form>
  );
};

Notice that when you call setPriceMap you pass a new object rather than mutating the object.请注意,当您调用setPriceMap您传递的是一个新对象,而不是改变该对象。

A constant is exactly what the name suggests.常量正是顾名思义。 It will always be constant and immutable.它永远是不变的和不可变的。 If you change it to let priceMap = {};如果你把它let priceMap = {}; you should be able to change its values你应该能够改变它的值

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM