The standard ABI coder does not allow arrays of dynamic types, structs or nested variables between the Solidity contract and the dApp.
The ABI v2 coder; which allows structs, nested and dynamic variables to be passed into functions, returned from functions and emitted by events.
Note: Do not use experimental features on live deployments.
As per the list of v0.8 breaking changes, the ABIEncoderV2 is not experimental anymore - it is actually enabled by default by the compiler.
https://ethereum.stackexchange.com/questions/64562/about-abi-encoder-v2