With 301 redirects, you are essentially combining multiple websites into one. With rel canonicals, you are able to leave the old websites where they are while focusing on the new one. Leaving the websites where they are might make sense if you want to keep them live for other reasons than SEO. If you are purely thinking about SEO and you just want to combine and clean everything, we would suggest redirecting and implementing a proper merger between those websites, including using the change site feature in Google Search Console. However, if you want to keep the other websites alive for whatever reason then using the rel canonical tags is a good approach.