Jam*_*esG 8 javascript hook scope react-native
我正在尝试从另一个函数更新状态的值。
我是这样声明的:
const App () => {
const [positionAX, setPositionAX] = useState(100)
const [positionAY, setPositionAY] = useState(100)
}
Run Code Online (Sandbox Code Playgroud)
除了App
我还有另一个功能:
const setPosition = () => {
setPositionAX(200);
setPositionAY(200);
}
Run Code Online (Sandbox Code Playgroud)
当我打电话时,setPosition()
我收到错误:
找不到变量:setPositionAX
找不到变量:setPositionAY
我试图移到const [positionAX, setPositionAX] = useState(100)
文件的顶部,但随后出现错误:
无效的钩子调用。钩子只能在函数体内调用。
如何从其他函数更新该变量?
我似乎无法让它工作,我不确定我做错了什么
这是您给我的代码的现场小吃示例:https : //snack.expo.io/Cd!hwDQ0m
如果我添加警报:
alert("pressed")
Run Code Online (Sandbox Code Playgroud)
进入 handleClick 函数,它起作用了,所以出于某种原因,它只是不能与setPositionA([200, 200])
.
另外作为附加说明: 在我的应用程序示例中,有两个功能和设置状态的功能,以及显示状态的功能是分开的,这就是为什么我遇到了我打算在初始堆栈溢出帖子中提出的问题.
这是我试图实现的那个例子的小吃:
https://snack.expo.io/6TUAkpCZM
我使用“positionX”和“positionY”作为变量来定义渲染出的元素的顶部和左侧位置,但是,变量positionX
和positionY
变量的实际设置是在另一个函数中完成的
我是一名初级开发人员,所以我真的很想感谢你在这方面的所有帮助,如果这是超级菜鸟,我也很抱歉。
我试过你的方法,但我似乎无法让它工作。我认为对于我想要实现的目标以及我想要实现的目标存在一些困惑。这可能是我的错,因为我是一个 noobie 开发人员,所以请原谅我。我不想只是发布我所有的代码,因为我认为人们不喜欢仅仅转储代码并像“修复这个”一样 - 但是,对于这种情况,它可能是最好的哈哈。
这是我的代码的完整小吃:https : //snack.expo.io/uk8yb5xys
我想要的是这个:
指示用户从单词“start”到单词“end”画一条线。如果绘制了线条并且用户线的起点和终点与给定的路径匹配,则向他们展示另一条要绘制的线,并且“起点”和“终点”的位置将移动,以便用户知道要绘制的位置。
有一个注释行:
// 这里是我需要更新开始和结束值的地方
这就是我需要“开始”一词和“结束”一词才能移动到新位置的地方。
目前,当您绘制一条完整的线并将手指从屏幕上移开时 - 没有任何反应。但是,当您将手指放下时,起点和终点会移动。当用户抬起手指时,我需要它们移动。
我很感激你在这方面的时间,所以谢谢你。
三个选项:
const setPositionFactory = (setPositionAX, setPositionAY) => (pos = 200) => {
setPositionAX(pos);
setPositionAY(pos);
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以通过多种方式在组件内部调用它:
直接地:setPositionFactory(setPositionAX, setPositionAY)(); // default: 200
Run Code Online (Sandbox Code Playgroud)
或保留该功能以备后用:
const setPosition = setPositionFactory(setPositionAX, setPositionAY);
// ...
setPosition(220);
Run Code Online (Sandbox Code Playgroud)
App
并更新组件内部的状态。会更地道。Observable
与rxjs和订阅您的组件了。将 observables 添加到您的问题代码中将是:
import { positionObs } from './observables';
const App () => {
const [positionAX, setPositionAX] = useState(100);
const [positionAY, setPositionAY] = useState(100);
positionObs.subscribe((pos) => {
setPositionAX(pos);
setPositionAY(pos);
});
}
Run Code Online (Sandbox Code Playgroud)
然后在 observables
import { Subject } from 'rxjs';
export const positionObs = new Subject();
export const setPosition = () => {
positionObs.next(200);
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12273 次 |
最近记录: |