Soy nuevo en React Native. Tengo que crear una promesa y poder obtener los datos de respuesta.
export async function findColor() { try{ const token = await AsyncStorage.getItem('token'); const id = await AsyncStorage.getItem('id'); const resp = ( await api(token).get(`api/blockgroup/getList`) ).data; const retVal = '"' + resp.data[0].template.mcolor +'"'; console.log (typeof retVal, retVal, 'retvalue'); return retVal; } catch(err){ return { error: true, code: err.request.status, }; } }Pero cuando llamé a la función me sale algo como esto
{"_U": 0, "_V": 0, "_W": nulo, "_X": nulo}
Descubrí que puedo acceder al valor usando .then() mientras intentaba imprimir el valor en la consola:
findColor().then(response => console.log(response));Obtuve el valor de la cadena
"#0eade1"
Pero no sé cómo puedo pasar el valor a una variable como una cadena. Digamos que quiero crear un color variable y pasarle el valor "#0eade1" . ¿Cómo puedo hacer eso?
Realmente aprecio si alguien puede ayudarme. ¡Gracias!
EDITAR: solo quiero dejar esto claro. necesito pasar el valor solo como una cadena porque necesito pasarlo a otro módulo desde la importación. Tengo un módulo de configuración donde necesito cambiar el color de mi tema con el valor del gancho que llamé. esa configuración solo aceptará objetos de cadena, y no sé si debo usar el componente nativo de reacción en el módulo de configuración.
Podrías crear un gancho que maneje eso. Considere el siguiente fragmento.
export function useColor() { const [color, setColor] = useState() React.useEffect(() => { // you should add your function in here findColor().then(response => setColor(response)) }, []) return { color, } } Luego use su gancho en su pantalla, siempre que necesite color .
const TestScreen = () => { // color can used however you like const {color} = useColor() }Editar: a juzgar por los comentarios, está utilizando un componente de clase que no permite el uso de ganchos. Todavía podemos hacer lo mismo.
constructor(props) { ... this.state = { color : "", } } componentDidMount() { findColor().then(response => this.setState({color: response})) } render() { return <Text>this.state.color</Text> }Debería probar esto con esto, puede usarlo como una llamada de función normal.
export async function findColor() { const token = await AsyncStorage.getItem('token'); const id = await AsyncStorage.getItem('id'); api(token).get(`api/blockgroup/getList`) .then(resp=>{ const retVal = '"' + resp.data[0].template.mcolor +'"'; console.log (typeof retVal, retVal, 'retvalue'); return retVal; }); .catch((err){ return { error: true, code: err.request.status, }; }) }