It's a first win in four games for the new leaders, while Rangers' third straight league defeat sees them stay eighth.
Story of the match
Grady Diangana came close to equalising for Albion in the fourth minute when his effort went just wide of Dieng's goal.
The lively Diangana continued to cause Mark Warburton's men problems and broke into the box before putting too much on his cross.
He turned provider for Grant and Darnell Furlong in quick succession, but both saw their efforts comfortably held by Dieng.
Rangers broke forward in the 37th minute as they looked to double their advantage. Ilias Chair played in Gray, but this time Johnstone was able to stop the danger.
With Valerien Ismael's side still trailing 10 minutes into the second half, he introduced former QPR loanee Jordan Hugill and Callum Robinson, with Phillips and Diangana going off. The home crowd voiced their annoyance at the decision to replace the latter.
Both sides had chances on the hour mark. Odubajo's fierce strike was saved by Johnstone, while Hugill headed wide from Mowatt's cross.
After going on a brilliant run, Chair struck an effort at Johnstone from a tight angle when it was perhaps a better idea to cross.
Albion equalised in the 75th minute when Dieng made an uncharacteristic howler. He looked to have kept out Grant's strike but bundled the ball into his own goal.
West Brom looked like the only side capable of winning the game after that.
Robinson and Jake Livermore both struck wide before Furlong's effort was saved by Dieng.
But the Baggies did go ahead in the 88th minute. Chair lost possession, and a brilliant move saw a clever flick from Hugill find Robinson, who played it to Grant, who fired home.