Как инициализировать пустой массив и передать его в props?
Почему нельзя взять и просто на странице Main вызвать этот запрос в componentDidMount? Что за извращение, вызывать его в App и передавать пропсом в роут?
componentDidMount вызывается после того как смонтируется компонент со всеми его дочерними элементами (следовательно, когда мы пытаемся использовать props.items, запрос к json еще даже не будет отправлен). 

Можно присвоить пустой массив для items в initialState, чтобы избавиться от этой ошибки, либо же добавить вспомогательное состояние, которое бы проверяло, загружены ли у нас данные, и если да, то выводить их.