Having been raised in a muslim country that was also pretty ethnically homogeneous, I had some pretty poor views on women and no experience with other races, which lead to me saying ignorant stuff quite frequently. When I moved away from the country, over the years, my liberal friends always showed me understanding and taught me where I was wrong. Thanks to their patience and compassion I'm exceedingly liberal and completely changed my views and I'm ashamed of who I used to be. I even participate in feminist and anti-racial activism. I've been called a SJW many times online. However, as a result of my experiences, I also recognize that not every person is inherently bad, and I try to educate people if I can. The other day, a coworker of mine said some messed up sexist thing. I could have called him out very blatantly, but that would just make him not talk to me again. Instead I struck up a conversation and asked him why he thinks that way, and it was soon clear that he realized he said something wrong and he apologized. Now we have more rapport than before, and I also have a platform to talk to him more and change his mind on issues. If I had just shut him down at that moment, he would just get angry at me.
I understand that this is kind of a best case scenario and not how it always works, and I get that some people are pretty disingenuous and don't want to even talk about it. Hell, I've received my own share of discrimination despite being white passing because of my origin. But when I try to start a dialogue with people I usually get some footing with some of them. I think there's a case-by-case line to walk in these situations and there is no singular solution, but just shouting at people over it has a near zero chance of achieving anything, whereas talking to them and trying to educate them actually has a chance of success, however low it is.