I confirmed this seems to be an issue in the latest 10.29.0 release, though I haven't tested with 11 beta.
Describe the bug
When combining specific preact 'key' and ContextProvider usage, I am seeing unexpected DOM results compared to the Vnodes generated.
To Reproduce
Go to the codepen below, and follow the instructions listed. - Basically expand all rows, and then collapse either row 1 or 2 and see the order of rows incorrect compared to the expected DOM.
https://codepen.io/turjmner8/pen/XJjVJyZ
I've tried the same type of setup in react as well, but do not see the same issue:
https://reactplayground.vercel.app/#N4IgLgziBcBmCGAbCBTANCAbrK1QEsA7AExQA8A6AK1xHwFsAHAewCcwACAQUcY9lbN6HAOQUA9D0bUIZEQB1CDFuw4AlFPADGnAUNGtNOhUqZtOwDlsPwwKNc2acAvv0HCRNnQFpiQ8VqI+CiEYCaKWsyEEJyRofBEKKwcALwcfloArvQhYBQA5ihgAKKIKDmhAEIAngCSxAAUno5hAJQRUTEcgk6pVjZ2Dk4NcWAJhEnthD15hiRJDYoc6kZ51pp2peW5i4TLyxraeQDKYKz4OgCyzKRoS-uEmYiId3v7hzoU67YoWxVgDSkU2WU1aIAwUhkZBgdDMqg+YDQHEsAGEhCwJqEkd87GjQuQXG59J5ViIANyKZTmZH9Db2FocVx6DxeMC+fyBYKhcmKDrRTjFMiMeAkeAAIzKeLsZE4aRxKClBIaj2erQphD5XTATiQABUbswIH0ANr3SzSsDQUQARhE2PRZTsxCtZ0yKEZr2W5oJVpE1q4dqsDqKKGd-CQqA9Zo4Ft91sqgciTEdoatCGQ7ucnppsZtKMTwadaYjmez3plvoATAXkyGw67S9HcyJKwH7bWi+GM1G3uXLaJKwn24wU2H05Gs02fQP88PR8Xu5PezHpyIAMw1kd1l2sN09r0riuiNdtoMd1Ndidlw-99dDs9bzvjxvL5tr2cP+eXzOKAC66oiRB4AgI0ABlxRQRAOAJEJiCNNEzExCx7jmUhWAaVpkXuZY4i6c0DSRIhSDIJFDHoZhMBQfU-EZPowAAC3wCAKEYQRGAgdV9m6IpMlYPZdi45YAB4gg4ABrFBqhSYBtT8CgLWcAA+bDBJkg15IJZxgBEURnBUrjgAaWTmA0mVUhSNI-R0gAfayY3Ui1zMs6sOFs+y5McizLI3TCADJfI4ATBK4oSxUyMBtT2MBqkYFAUnkEAwoiqIEo4KIUSCLQxOkjDUkU7jyMo6jmCMgiOCI8hWiU-Tgo4QAZchqkLxCSyLlLeYKqpqoTxCCNquLVe49MIIbAOAo1itApjOBgkh4PRKJciwt4Yh+PpgBU4yICtU12v2Ps403L9n33VSbyrQ7t2-E6DLO48LqfEtGRU39s2WCYAHdajsehfRMZZnAAt4yIoqiDT6Uq-EI+YyEwlJ8vW3bcM4TaTQoNGGKYigVrseSDQgf9eV2-BYEC4zTNlCybRETCEeC4nSfUpNH1DGnGvcw0sZHC4UAaCqSI4a0kX2qm50u47nAG3auM2znMp5vmOAAagFpE10l4LXEgyNadqmWIC5rR5ehpFBfssZEGKiBjQABhes29Tx41rTt7Vzct41KxdnULcdtdf3VwShq4zXu3piGTM8ymW2ppa6ZJ8OvkLFnY91vHZe53njZVnNV2rUWHsXAPgr1g2jeIpXs7VzjA+g7sdeLtP9blzPiJNpFXYdvwrYAFi9t3HYAVj7zvDWNAA2Yefa740AHZ-er4OVJD7WarDsmmdHVmpf2Evm75tuc6Pdd7ovcWi8E3eM4V5XTarmrl-deuL8b0uW-IA+O6n0eAA5J-dgBOP+jtrS23bt7d21pnbn3+kvQm0tGLMVQGAU4PwGj4S7oyAOAM4HcXmOhLeXEkY5jxrRNIGNEFjDsIDLihgwC8X4l1J4fVapqS7hQeg8BGANHDlDYisNmG1XZuTJyVNXJ2TJpHZyNlxEOQJCI4+HAAD8gU2YhUFMKUUEoFRRAtBQAACoITA+A0LiUktJCRmkOCYCQG6aSKpEDVW3oIoS4ExSQXZuYg0rg+bST5q4YGRUDTmIQRQAJoM-CuHEAIwRHBurqJFMQcUkodEEn0YY4xSRokdQ4FaIKMTYmuPcRJKSrCI6WOMp4iJ5Voa+Ohv48oINirBMxmE4qkSsmCWBLVTq29upMJUlgxQI1CBEKkODfhsSJpTQ4FEwmhNyAqE4KQBATxOBSHBCAGI1QyhfBAjCCgYowB7B1rAHR3gID4AAF4oCtJWMi6pnAgGcM4IAA
Expected behavior
The expectation is that the sub 'a', 'b', and 'c' rows should always either be shown or hidden below the parent row. The JSX seems to produce this, and using preact dev tools seems to reflect that order correctly in the Vnodes, but the actual realized DOM does not.
If you remove the 'key' setting from the 'li' elements, things work as expected. If you instead do not specify the ExpandableContext.Provider at all, OR specify it around all Label elements, things also work as expected. It seems to be that the key usage in addition to the conditional ContextProvider usage triggers this strange behavior.
I confirmed this seems to be an issue in the latest 10.29.0 release, though I haven't tested with 11 beta.
Describe the bug
When combining specific preact 'key' and ContextProvider usage, I am seeing unexpected DOM results compared to the Vnodes generated.
To Reproduce
Go to the codepen below, and follow the instructions listed. - Basically expand all rows, and then collapse either row 1 or 2 and see the order of rows incorrect compared to the expected DOM.
https://codepen.io/turjmner8/pen/XJjVJyZ
I've tried the same type of setup in react as well, but do not see the same issue:
https://reactplayground.vercel.app/#N4IgLgziBcBmCGAbCBTANCAbrK1QEsA7AExQA8A6AK1xHwFsAHAewCcwACAQUcY9lbN6HAOQUA9D0bUIZEQB1CDFuw4AlFPADGnAUNGtNOhUqZtOwDlsPwwKNc2acAvv0HCRNnQFpiQ8VqI+CiEYCaKWsyEEJyRofBEKKwcALwcfloArvQhYBQA5ihgAKKIKDmhAEIAngCSxAAUno5hAJQRUTEcgk6pVjZ2Dk4NcWAJhEnthD15hiRJDYoc6kZ51pp2peW5i4TLyxraeQDKYKz4OgCyzKRoS-uEmYiId3v7hzoU67YoWxVgDSkU2WU1aIAwUhkZBgdDMqg+YDQHEsAGEhCwJqEkd87GjQuQXG59J5ViIANyKZTmZH9Db2FocVx6DxeMC+fyBYKhcmKDrRTjFMiMeAkeAAIzKeLsZE4aRxKClBIaj2erQphD5XTATiQABUbswIH0ANr3SzSsDQUQARhE2PRZTsxCtZ0yKEZr2W5oJVpE1q4dqsDqKKGd-CQqA9Zo4Ft91sqgciTEdoatCGQ7ucnppsZtKMTwadaYjmez3plvoATAXkyGw67S9HcyJKwH7bWi+GM1G3uXLaJKwn24wU2H05Gs02fQP88PR8Xu5PezHpyIAMw1kd1l2sN09r0riuiNdtoMd1Ndidlw-99dDs9bzvjxvL5tr2cP+eXzOKAC66oiRB4AgI0ABlxRQRAOAJEJiCNNEzExCx7jmUhWAaVpkXuZY4i6c0DSRIhSDIJFDHoZhMBQfU-EZPowAAC3wCAKEYQRGAgdV9m6IpMlYPZdi45YAB4gg4ABrFBqhSYBtT8CgLWcAA+bDBJkg15IJZxgBEURnBUrjgAaWTmA0mVUhSNI-R0gAfayY3Ui1zMs6sOFs+y5McizLI3TCADJfI4ATBK4oSxUyMBtT2MBqkYFAUnkEAwoiqIEo4KIUSCLQxOkjDUkU7jyMo6jmCMgiOCI8hWiU-Tgo4QAZchqkLxCSyLlLeYKqpqoTxCCNquLVe49MIIbAOAo1itApjOBgkh4PRKJciwt4Yh+PpgBU4yICtU12v2Ps403L9n33VSbyrQ7t2-E6DLO48LqfEtGRU39s2WCYAHdajsehfRMZZnAAt4yIoqiDT6Uq-EI+YyEwlJ8vW3bcM4TaTQoNGGKYigVrseSDQgf9eV2-BYEC4zTNlCybRETCEeC4nSfUpNH1DGnGvcw0sZHC4UAaCqSI4a0kX2qm50u47nAG3auM2znMp5vmOAAagFpE10l4LXEgyNadqmWIC5rR5ehpFBfssZEGKiBjQABhes29Tx41rTt7Vzct41KxdnULcdtdf3VwShq4zXu3piGTM8ymW2ppa6ZJ8OvkLFnY91vHZe53njZVnNV2rUWHsXAPgr1g2jeIpXs7VzjA+g7sdeLtP9blzPiJNpFXYdvwrYAFi9t3HYAVj7zvDWNAA2Yefa740AHZ-er4OVJD7WarDsmmdHVmpf2Evm75tuc6Pdd7ovcWi8E3eM4V5XTarmrl-deuL8b0uW-IA+O6n0eAA5J-dgBOP+jtrS23bt7d21pnbn3+kvQm0tGLMVQGAU4PwGj4S7oyAOAM4HcXmOhLeXEkY5jxrRNIGNEFjDsIDLihgwC8X4l1J4fVapqS7hQeg8BGANHDlDYisNmG1XZuTJyVNXJ2TJpHZyNlxEOQJCI4+HAAD8gU2YhUFMKUUEoFRRAtBQAACoITA+A0LiUktJCRmkOCYCQG6aSKpEDVW3oIoS4ExSQXZuYg0rg+bST5q4YGRUDTmIQRQAJoM-CuHEAIwRHBurqJFMQcUkodEEn0YY4xSRokdQ4FaIKMTYmuPcRJKSrCI6WOMp4iJ5Voa+Ohv48oINirBMxmE4qkSsmCWBLVTq29upMJUlgxQI1CBEKkODfhsSJpTQ4FEwmhNyAqE4KQBATxOBSHBCAGI1QyhfBAjCCgYowB7B1rAHR3gID4AAF4oCtJWMi6pnAgGcM4IAA
Expected behavior
The expectation is that the sub 'a', 'b', and 'c' rows should always either be shown or hidden below the parent row. The JSX seems to produce this, and using preact dev tools seems to reflect that order correctly in the Vnodes, but the actual realized DOM does not.
If you remove the 'key' setting from the 'li' elements, things work as expected. If you instead do not specify the ExpandableContext.Provider at all, OR specify it around all Label elements, things also work as expected. It seems to be that the key usage in addition to the conditional ContextProvider usage triggers this strange behavior.