数组或迭代器中的每个子代都应具有唯一的“键”道具。在反应js?

时间:2018-12-08 11:27:20

标签: javascript arrays reactjs

我已经提供了不同的密钥。为什么它会警告我? 这是我的代码 https://codesandbox.io/s/0xvqw6159n

    MapsInitializer.initialize(this);
        mMapView = (MapView) mView.findViewById(R.id.map);
        if(mMapView !=null){
        mMapView.onCreate(savedInstanceState);

        mMapView.getMapAsync(this);
        }

        }

@Override
public void onMapReady(GoogleMap googleMap) {
        LatLng Home = new LatLng(10.263392,123.82489109999999);
        mGoogleMap = googleMap;
        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        googleMap.addMarker(new MarkerOptions().position(Home).title("my home"));
        googleMap.animateCamera(CameraUpdateFactory.newLatLng(Home));
        }   


 public void onResume() {
    super.onResume();
    mapView.onResume();
}

public void onPause() {
    super.onPause();
    mapView.onPause();
}

public void onDestroy() {
    super.onDestroy();
    mapView.onDestroy();
}

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    mapView.onSaveInstanceState(outState);
}

public void onLowMemory() {
    super.onLowMemory();
    mapView.onLowMemory();
}

3 个答案:

答案 0 :(得分:1)

首先,您将key设置为错误的行。 Fragment不能呈现为HTML,但是需要key道具。

<Fragment key={index}>
   <TableRow>

第二,由于index + i不能保证唯一性,因此我建议您为嵌套属性添加唯一的ID。

答案 1 :(得分:0)

index + i并非对于indexi的每个值都是唯一的。

假设fetchDatarow的长度均为2,因此indexi的长度都从0到1。

key = index + i

index  i     key
0      0     0
0      1     1
1      0     1
1      1     2

这两次产生1,因此键不是唯一的。转换为字符串会有所帮助:

key = String( index ) + String( i )

index  i     key
0      0     "00"
0      1     "01"
1      0     "10"
1      1     "11"

或者您可以乘以row.length以产生唯一的整数。

key = ( index * row.length ) + i

index  i     key
0      0     0
0      1     1
1      0     2
1      1     3

答案 2 :(得分:0)

您的titledisplay text是否唯一?如果是这样,您可以将它们用作主要道具。

<TableBody>
          {fetchData.map(([title, row], index) => {
            return (
              <Fragment>
                <TableRow key={title}>
                  <TableCell colSpan="2">{title}</TableCell>
                </TableRow>
                {row.map(({ displaytext, value }, i) => (
                  <TableRow key={displaytext}>
                    <TableCell>{displaytext}</TableCell>
                    <TableCell>{value}</TableCell>
                  </TableRow>
                ))}
              </Fragment>
            );
          })}
</TableBody>