I just learn react, and want to achieve a function : both A,B are components, if A scroll, then B scroll
The following is my code
<A onScroll="handleScroll"></A>
//what i write now
handleScroll: function(event){
var target = event.nativeEvent.target;
//do something to change scrollTop value
target.scrollTop += 1;
// it looks the same as not use react
document.getElementById(B).scrollTop = target.scrollTop;
}
but actually I want my code like this
//what i want
<A scrollTop={this.props.scrollSeed}></A>
<B scrollTop={this.props.scrollSeed}></B>
//...
handleScroll(){
this.setState({scrollSeed: ++this.state.scrollSeed})
}
it is similar to input
<input value="this.props.value"/>
<input value="this.props.value"/>
<input ref='c' onChange={handleChange}>
//...
handleChange: function() {
// enter some code in c and then render in a and b automatically
}
In other words, I want some attribute, like scrollTop
(different
form <input value={}>
,because <A scrollTop={}>
doesn't work) ,is bind with some state, so that I can just use setState
, and they will update by themselves.
I googled before but can't find the answser. I hope that my poor English won't confuse you.
Here's an updated version of Season's answer, including a runnable snippet. It uses the recommended method for creating refs.
There are a number of patterns to achieve this. This sample is what I came up with to get you up and going.
First create a component class which has an oversize element for scroll effect. When dragging the scroll bar, this component calls its
handleScroll
React property to notify its parent component, with the value ofscrollTop
.The parent component, aka wrapper, keeps the scroll top value in its state. Its
handleScroll
is passed to the child components as callback. Any scroll on the child elements triggers the callback, sets the state, results in a redraw, and updates the child component.And render the wrapper, presuming an existing
<div id="container"></div>
.2019's answer
First, the fix:
Second, a little explanation:
Idk what is your reason why you got here but I have used
flex-direction: column-reverse
for my FlatList (it's a list of elements). And I need this property forz-index
purposes. However, browsers set their scroll position to the end for such elements (tables, chats, etc.) - this may be useful but I don't need that in my case.Also, example is shown using React Hooks, but you can use
oldermore traditional way of defining refsthis.refs is deprecated. use reactjs.org/docs/refs-and-the-dom.html#creating-refs