Reactjs 在react native中动态(全局)设置焦点上的输入字段
我正在开发物联网/移动应用程序。目前,我有一个从我的物联网设备接收和解码异步包的代码。该设备连接天平等工具和其他设备。我需要将此物联网数据发送到输入字段 管理物联网的代码在后台运行,它从应用程序开始,并使用回调运行。它管理连接、重新连接,并对接收到的包数据设置回调。 例如,包数据可以包含单个值,如:10.34 此代码从应用程序开始 在主应用程序上,我有许多输入字段,数字和文本。当我收到来自IoT的包时,我想将其写入当前关注的字段Reactjs 在react native中动态(全局)设置焦点上的输入字段,reactjs,react-native,redux,Reactjs,React Native,Redux,我正在开发物联网/移动应用程序。目前,我有一个从我的物联网设备接收和解码异步包的代码。该设备连接天平等工具和其他设备。我需要将此物联网数据发送到输入字段 管理物联网的代码在后台运行,它从应用程序开始,并使用回调运行。它管理连接、重新连接,并对接收到的包数据设置回调。 例如,包数据可以包含单个值,如:10.34 此代码从应用程序开始 在主应用程序上,我有许多输入字段,数字和文本。当我收到来自IoT的包时,我想将其写入当前关注的字段 用户在应用程序中启动操作,有一个名为Weigth的字段 用户将注意
Weigth
的字段权重的输入字段中
文档
(根级别)将不起作用
我的应用程序目前正在使用Redux(如果它对解决方案有帮助的话)您需要通过reducer进行一些全局数据管理:
- 将一个对象添加到全局存储中,存储每个输入的值,并按其id进行索引(例如)
- 在存储中添加另一个值以保存最后一个聚焦的输入id
- 在每个输入中添加一个
处理程序。无论何时触发,将id传递给reducer并将其保存在全局存储中onFocus
- 当IoT操作发生时,修改最后一个聚焦输入的存储值
- 如果需要让用户手动修改输入,请为每个输入添加一个
事件侦听器,并启动减速机来修改指定的输入值onChange
我宁愿创建一个
CustomInput
抽象组件来完成所有需要的普通工作,而不是修改所有输入渲染。您不能将CreateRef
直接用于Redux或上下文API。您需要创建一些复杂的forwardRef,因此它被认为是一种糟糕的模式
更好的解决方案是实现观察者模式
onFocus
连接到观察者同步系统中onFocus
回调/**
*基于观察者模式的物联网
*只允许一个订户,因为只应更新聚焦字段
*/
设subscriberCb=null;
const subscribeIoT=(notifyObserver)=>{
subscriberCb=notifyObserver;
};
常量取消订阅=()=>{
subscriberCb=null;
};
const updateIoTValue=(newValue)=>{
console.log(newValue);
if(subscriberCb!==null){
console.log(“更新观察者”);
下标cb(newValue);
}
}
出口{
订阅,
取消订阅,
更新值
};
onFocus
附件:
<TextInput type="text" value={value} onChangeText={setValue} onFocus={() => {
console.log('Focused');
subscribeIoT( newValue => setValue(newValue.toString()));
}} />
{
console.log('Focused');
subscribeIoT(newValue=>setValue(newValue.toString());
}} />
我正在使用Formik动态创建表单。因此,状态是在它内部处理的。我不确定我能那么容易地找到聚焦场的设置状态。我正在考虑使用另一种方法来保存某种“ref”或“C-like-pointer thingy”。有什么想法吗?我刚刚发现了福米克。看起来它有很多定制的方法,所以这取决于你如何使用它。例如,Formik.setFieldValue
和Formik.resetForm
(使用nextState.values
)看起来很适合您。