【发布时间】:2021-09-19 06:15:43
【问题描述】:
您好,我有一个用于评级的预填充滑块,我用 API 中的数据预填充它,如果用户滑动我喜欢更新 API 数据库。一切正常,除了滑块总是通过 useEffect 跳回到预填充的值。如何更改状态以使用户的值优先于预填充的值?
这是我的代码:
const [ user ] = useContext(Context);
const location = useLocation();
const { pathname } = location;
const splitLocation = pathname.split("/");
const movieId = splitLocation[2];
const [ MovieResults, setMovieResults ] = useState([]);
const [ value, setValue ] = useState(5);
useEffect(() => {
let isMounted = true;
fetch(`${API_URL}account/xxxxxxxx/rated/movies?api_key=${API_KEY}&session_id=${user.sessionId}&sort_by=created_at.desc`)
.then(res => res.json())
.then(data => isMounted ? setMovieResults(data.results) : null)
.then(isMounted ? MovieResults.forEach((arrayItem) => {
if(arrayItem.id.toString() === movieId.toString()) {
setValue(arrayItem.rating);
}
}) : null)
return () => { isMounted = false };
},[user.sessionId, MovieResults, movieId]);
const changeSlider = (e) => {
// This value should override the default value from the api
setValue(e.currentTarget.value);
};
return (
<div>
<input
type="range"
min="1"
max="10"
className="rate-slider"
value={value}
onChange={e => changeSlider(e)}
/>
{value}
<p>
<button className="rate-button" onClick={() => callback(value)}>Rate</button>
</p>
</div>
)
感谢您的帮助。
【问题讨论】:
-
这对我来说似乎很好用。你能显示minimal reproducible example吗?
标签: reactjs input slider state use-effect