В вашем конкретном примере вы просто получаете ширину элемента и передаете его другому элементу. Если вы используете последнюю версию реагирования, вы должны проверить api новой ссылки ( https://reactjs.org/docs/refs-and-the-dom.html ) И ваш пример будет выглядеть примерно так [ 112]
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
width: 0
};
this.parentRef = React.createRef();
}
componentDidMount() {
window.addEventListener("resize", this.onResize);
this.onResize();
}
componentWillUnmount() {
window.removeEventListener("resize", this.onResize);
}
onResize = () => {
this.setState({
width: this.getParentSize()
});
};
getParentSize() {
return (this.parentRef.current && this.parentRef.current.offsetWidth) || 0;
}
render() {
return (
);
}
}
ReactDOM.render( , document.getElementById("root"));
Нет никакого непосредственного ответа; операторы статичны, и не могут быть выражены в ограничениях - и существующие примитивы не реализуют определенного интерфейса (контраст по отношению к IComparable [< T>], который может использоваться для эмуляции больше - чем / меньше).
Однако; если Вы просто хотите, чтобы это работало, то в.NET 3.5 существуют некоторые опции...
я соединил библиотеку здесь , который предоставляет эффективный и простой доступ к операторам с дженериками - такими как:
T result = Operator.Add(first, second); // implicit <T>; here
Это может быть загружено как часть MiscUtil
Кроме того, в C# 4.0, это становится возможным через dynamic
:
static T Add<T>(T x, T y) {
dynamic dx = x, dy = y;
return dx + dy;
}
у меня также была (однажды).NET 2,0 версии, но это менее тестируется. Другая опция состоит в том, чтобы создать интерфейс такой как [1 112]
interface ICalc<T>
{
T Add(T,T)()
T Subtract(T,T)()
}
и т.д., но затем необходимо передать ICalc<T>;
через все методы, который становится грязным.