Fetching data in componentWillMount doesn't really do anything differently than using it in componentDidMount. Your component will re-render either way.
That being said, the React documentation recommends that you fetch data in the componentWillMount lifecycle hook. This is to ensure everything has mounted properly.
You have to fetch data somewhere... no matter where you will have to setState and trigger a re-render. Therefore data should be fetched in the component it is being used in, or the closest ancestor of the components sharing the fetched data. You do this to prevent the re-render of components that do not require the fetched data.