<div className="controls">
<i className="fas fa-play" value='work' onClick={(e) => console.log(e.target.value)}></i>
<audio loop autoPlay></audio>
</div>
I am stupid, why is this not working.
i elements have no value property, they have textContent and innerHTML, but no value. value is only for form elements. The value attribute you have on i is an invalid attribute, and isn't reflected by a property. You could use e.target.getAttribute("value"), but value would still be invalid.
With more context, we might be able to give you a more React-specific answer (you probably have an in-scope variable containing the value you could just use directly), but in the absense of more context, here's a baseline answer:
You can use a data-* attribute and access that value either with e.target.getAttribute("data-value"):
<div className="controls">
<i className="fas fa-play" data-value='work' onClick={(e) => console.log(e.target.getAttribute("data-value"))}></i>
<audio loop autoPlay></audio>
</div>
...or with dataset (e.target.dataset.value):
<div className="controls">
<i className="fas fa-play" data-value='work' onClick={(e) => console.log(e.target.dataset.value)}></i>
<audio loop autoPlay></audio>
</div>