They made an explosive start to the game and will have been disappointed to not go into the break leading.
Memphis Depay almost opened his account in the second minute but was denied by Georgi Bushchan after a solo run.
Bushchan had to be at his best again shortly after when Georginio Wijnaldum played Denzel Dumfries in on goal.
Moments later, the roles were reversed, with Dumfries crossing to Wijnaldum. However, Paris Saint-Germain’s newest recruit could only fire over the crossbar.
The former Liverpool man would continue to threaten and had a powerful volley well saved by Bushchan after a small deflection.
The best chance of the first half came five minutes before the break, and again it fell to Dumfries.
Depay put a cross to the back post, but the right-back somehow missed the target with a free header from six yards out.
But it wasn’t all one-way traffic. Ukraine had a couple of chances of their own. Andriy Yarmolenko twisted his way into the box but hit his right-footed shot straight into the arms of Maarten Stekelenburg.
Before the whistle, Stekelenburg was put to the test again, rushing out of his goal to deny Yarmolenko again.
The second half continued at the same speed, but this time the two sides were far more clinical.
The scoring was opened shortly after the break by Wijnaldum. Dumfries again was involved, playing a low cross that was spilt by Bushchan to the 30-year-old’s feet, and he produced an excellent finish into the top corner.
Not long afterwards, Frank de Boer’s men doubled their lead. Dumfries once again got into the box, causing havoc before forcing the ball to Wout Weghorst. The big forward slammed his shot in at the near post.
But it was not without a bit of VAR controversy. There was a check to see if Dumfries had brought down Mykolenko, but the goal was allowed to stand.
Netherlands took control after that and seemed to be seeing the game out comfortably.
That was until Yarmolenko produced the goal of the tournament. After a lay off by Roman Yaremchuk, the winger hit an absolute stunner into the top corner, giving Ukraine some hope with 15 minutes remaining.
And just four minutes later, they grabbed an unlikely equaliser. Ruslan Malinovskiy swung in a perfect free-kick, and Yaremchuk converted with a free header.
It was a bitter blow to the Dutch side, who had dominated for most of the evening. However, they would eventually snatch a winner, and it was Dumfries who finally converted one of his chances.
Substitute Nathan Ake found the PSV man, and he headed in at the near post, securing a victory in their opener.
The dramatic win takes Netherlands to second place in their group, behind Austria on goal difference. The two meet each other next time out.
Maarten Stekelenburg (6/10) – Could do nothing about either goal. Did well whenever called upon.
Denzel Dumfries (9/10) *MOTM* – Always a threat down the right. Scored the winning goal and could have had a hat-trick. Also involved in the first two goals.
Jurrien Timber (6/10) – A decent performance from the teenager, but he may lose his place once Matthijs de Ligt returns.
Stefan de Vrij (7/10) – Limited the number of chances that Ukraine could create and not at fault for either goal conceded.
Daley Blind (6/10) – Coped with the physical threat of Yaremchuk. Substituted on 64 minutes.
Patrick van Aanholt (6/10) – Got forward well but sometimes caught out of position at the back. Perhaps a bit fortunate not to concede a penalty in the first half.
Marten de Roon (6/10) – Helped his side dominate possession but did little worth remembering.
Georginio Wijnaldum (8/10) – At the heart of so much of Netherlands’ attacking play. Scored with a fantastic finish.
Frenkie de Jong (7/10) – Composed, smooth, and hard working in the midfield. Everything we’ve come to expect from him.
Wout Weghorst (6/10) – Took the only chance he got but also left Yaremchuk unmarked for his goal.
Memphis Depay (7/10) – Looked bright. Should have had an assist for Dumfries shortly before half time.
Nathan Ake (/10)
Owen Wijndal (/10)
Luuk De Jong (NA/10)
Joel Veltman (NA/10)
Donyell Malen (NA/10)
Georgi Bushchan (4/10) – Followed up a very good first half with a disastrous second. Will have been disappointed with all three goals.
Oleksandr Karavaev (6/10) – Most of Netherlands’ attacks came down the opposite side, so he had less to do.
Illia Zabarnyi (6/10) – Did alright against the physical presence of Weghorst, but was part of a defence that allowed De Boer’s side to have many chances.
Mykola Matvienko (6/10) – Once again, didn’t have an awful night individually but still conceded too many chances.
Vitaliy Mykolenko (4/10) – Made errors in the lead up to the first two Netherlands goals. A difficult night.
Ruslan Malinovskiy (6/10) – A few nice touches but way off his best. Put in an excellent free-kick for Yaremchuk’s goal.
Serhiy Sydorchuk (6/10) – A few decent tackles, but sometimes struggled to cope up against a strong Dutch midfield.
Oleksandr Zinchenko (5/10) – A disappointing night from the Manchester City man, who will be expected to do more.
Andriy Yarmolenko (8/10) – Ukraine’s main threat throughout and capped the night with a belter of a goal. Deserved more.
Roman Yaremchuk (7/10) – Barely got close to goal for the first 75 minutes but took his goal well and also got an assist.
Oleksandr Zubkov (NA/10) – Substituted after 13 minutes with an injury.
Marlos (5/10) – Subbed on early on following Zubkov’s injury. Did very little of note before being taken off again.
Mykola Shaparenko (5/10)