Seventh-grade teacher Jack Johnson, of East Lansing, said the GOP's goal was obvious: "You take away money from the unions and they can't support the Democratic candidates, and the Republicans take over."
"No justice, no peace!" protesters chanted, the chorus reaching a deafening din as the House prepared to vote. "Shame on you!" they shouted from the House gallery as the results were announced.
Republicans insisted the bills were given adequate consideration, as the issue had been debated across the state for years. Snyder said he saw no reason to delay signing the measures, especially with opponents still hoping to dissuade him.
"They can finish up, and they can go home because they know ... making more comments on that is not going to change the outcome," he said. "I view this as simply trying to get this issue behind us."
Don't count on it, state Democratic Chairman Mark Brewer retorted.
"If Gov. Snyder thinks that Michigan citizens will go home and forget about what happened in Lansing today, he is sorely mistaken," state Democratic Chairman Mark Brewer said. "Snyder has set the tone for the next two years, and this fight is not over."
Snyder said he expects the law to be challenged in court but believes it will stand. Opponents also said they might seek recalls of some legislators.
Meanwhile, unions must adapt to a new reality.
The law takes effect 90 days after the Legislature adjourns. Even then, workers bound by existing contracts won't be able to stop paying union fees until those deals expire. But activists fear some will opt out at first opportunity.
"A lot of people like to freeload," said Sharon McMullen, an employee of the state Department of Licensing and Regulatory Affairs.
Associated Press writers Todd Richmond and Corey Williams in Lansing contributed to this story.