Navigation Issue In React Native - react-native

import {SafeAreaView, StyleSheet,ScrollView, Text,Button, View, TouchableOpacity,TextInput} from 'react-native';
import React, {Component, useState} from 'react';
import Header from './AllHeaders/Header';
import UnitClerkHeader from './AllHeaders/UnitClerkHeader';
import AppointmentHeading from './AllHeaders/AppointmentHeading';
import PatientDoc from './PatientDoc';
import styles from './Styles/CompleteStyling';
export default class HomeScreen extends Component {
render(){
return (
<ScrollView>
<SafeAreaView style={{flex: 1}}>
<View>
<Header name="HOME SCREEN" class= ""/>
<UnitClerkHeader/>
<View style={styles.containerForButton}>
<TouchableOpacity style={styles.button_Side_by_Side}
onPress={() =>this.props.navigation.navigate("SignInScreen")}
>
<Text style={styles.Button_text_styling}>
REGISTRATION </Text>
</TouchableOpacity>
<TouchableOpacity style={styles.button_Side_by_Side}
onPress={() =>this.props.navigation.navigate("SignInScreen")}
>
<Text style={styles.Button_text_styling}>
SEARCH </Text>
</TouchableOpacity>
</View>
<AppointmentHeading name="UPCOMING APPOINTMENTS" class= "" />
<PatientDoc/>
<PatientDoc/>
<PatientDoc/>
<PatientDoc/>
<PatientDoc/>
<TouchableOpacity style={styles.buttonGeneral}
onPress={() =>this.props.navigation.navigate("SignInScreen")}
>
<Text style={styles.Button_text_styling} >
NEXT </Text>
</TouchableOpacity>
</View>
</SafeAreaView>
</ScrollView>
);
}
}
ERROR Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.
Check the render method of HomeScreen.

Check if you imported components properly if you
export default
then you don't use {} when you import and if you just exported your component then you need {}... I suggest you check this first

Related

KeyboardAvoidingView not working with overlay

I have a text input in an overlay in my react native application. I used keyboardavoidingview to make sure the keyboard doesn't cover my submit button but the entire overlay is not moving with the keyboard only the inside content is moving. Heres an image of what is happening. Is there any way to move the overlay with the content too?
This is my code
<Overlay overlayStyle={{borderRadius:15,backgroundColor:'#f8f8f8',paddingTop:20,paddingLeft:20,height:300}} isVisible={showrevoverlay} onBackdropPress={()=>{resetoverlay()}}>
<KeyboardAvoidingView keyboardVerticalOffset={300} style={{flex:1,alignItems:'center',justifyContent:'center'}} behavior="padding">
<View style={{flexDirection:'column',justifyContent:'space-evenly',alignItems:'center'}}>
<Text style={{fontWeight:'bold',textAlign:'left',width:'100%'}}>Review:</Text>
<TextInput
placeholder="Write review"
style={{alignItems:'center',justifyContent:'center'}}
style={{ height: 200,width:300, borderColor: 'gray',backgroundColor:'#eef4f6',marginTop:10}}
onChangeText={text => setreview(text)}
value={review}
/>
<TO onPress={()=>{saveReview()}} style={{marginTop:10,width:100,height:50,backgroundColor:'#4B53F2',justifyContent:'center',alignItems:'center'}}><Text style={{fontFamily:'Montserrat-Bold',color:'white',fontSize:15}}>Submit</Text></TO>
</View>
</KeyboardAvoidingView>
</Overlay>
Here is the solution to solve this problem. you can add your code.
import React , {Component} from 'react';
import {View , Dimensions,ScrollView} from 'react-native';
const windowHeight = Dimensions.get('window').height;
export default class Overlay extends Component {
render(){
return(
<View style={{flex:1}}>
<ScrollView style={{flex:1}}>
<View style={{width:'100%', height:windowHeight }}>
/*Every thing inside this will shift up with out changing style */
</View>
</ScrollView>
</View>
)
}
}

Cannot use navigation on component inside arrow function. Undefined is not an object (Evaluating 'n.props.navigation')

Cannot navigate to other screen
I've tried import withNavigation but still can't work, it was showing
Uncaught Error : Undefined is not an object (Evaluating 'n.props.navigation')
Article.js
import ArticleItem from 'ArticleItem'
.....
<FlatList
style={styles.containerFlatList}
data={this.state.dataSource}
renderItem={({item}) =>
<ArticleItem
navigation={this.props.navigation}
title={item.title}
image={item.article_path}
id={item.id}
date={moment(item.created_at).locale('id').format("ll")}/>
}
keyExtractor={({title},index) => title}
/>
}
ArticleItem.js
import {withNavigation} from 'react-navigation';
import DetailArticle from '../screens/DetailArticle';
import Router from '../Router';
export default ArticleItem = (data) => (
<View style={styles.containerArticle}>
<TouchableOpacity onPress={() =>
{this.props.navigation.navigate('DetailArticle')}}>
<Image style={styles.imageArticle} source=
{{uri:'http://localhost/img/'+data.image}}/>
<View style={{padding: 10}}>
<Text style={{marginBottom: 8, fontSize: 18}}>{data.title}</Text>
<Text style={{fontSize: 12, color:'grey'}}>{data.date}</Text>
</View>
</TouchableOpacity>
</View>
);
Did i missed something?
From the code it looks like ArticleItem is a function component so in that you cannot access props from this keyword.
For your example you are sending props as data
So access the navigation as data.navigation.navigate('some-route')
For a component like this.
<ComponentA a='1' b='2'/>
If this is a functional component like here
const ComponentA=props=>{
//access here as props.a or props.b
return someJSX
}

selectedSearchTab is not a function

Working with react-native is mega frustrating. Its more frustrating because I am new to it. I have written component that takes redux action as an input.
import React from "react";
import {Text} from "react-native";
import styles from "./searchBoxStyles";
import {View,InputGroup,Input} from "native-base";
import Icon from "react-native-vector-icons/FontAwesome";
export const SearchBox = (getInputData,selectedSearchTab) => {
function handleInput(key,val){
getInputData({
key,
value:val});
}
return(
<View style={styles.searchBox}>
<View style={styles.inputWrapper}>
<Text style={styles.label}>PickUp</Text>
<InputGroup>
<Icon name="search" size={15} color="#FF5E3A"/>
<Input onFocus={()=>selectedSearchTab("pickUp")} style={styles.inputSearch} placeholder="choose pickup location" onChanangeText={handleInput.bind(this,"pickUp")}/>
</InputGroup>
</View>
<View style={styles.secondInputWrapper}>
<Text style={styles.label}>DropOff</Text>
<InputGroup>
<Icon name="search" size={15} color="#FF5E3A"/>
<Input onFocus={()=>selectedSearchTab("dropOff")} style={styles.inputSearch} placeholder="choose drop off location" onChanangeText={handleInput.bind(this,"dropOff")}/>
</InputGroup>
</View>
</View>
);
};
export default SearchBox;
getInputData & selectedSearchTab are both redux actions, passed down from container component.
Clicking on the textBox I get selectedSearchTab is not a function error.

Cannot read property 'setNativeProps' of undefined react-native

i have used react-native-drawer . i have kept the side menu file seperate and import it in main file . i want to write click function in side menu file . when i click the first item it gives me this error.
how can i solve this problem i think its mocking child component error .
here is my side menu file code
import React, { Component } from 'react';
import {
View,
StyleSheet,TouchableHighlight
} from 'react-native';
import { Content,Text,List, ListItem .
,Header,Icon,Left,Right,Body,Button,Title} from 'native-base';
import StatusComponent from './StatusComponent';
import Hr from 'react-native-hr';
export default class SideBar extends Component{
constructor(props){
super(props);
console.log(props)
asad=this.asad.bind(this);
}
asad(){
alert('gata rhe ');
}
render(){
return(
<View style={{backgroundColor:'#262626',flex:1,
position:'relative' ,top:62}} >
<List>
<ListItem >
<Right>
<TouchableHighlight onPress={()=>this.asad(this.props)}>
<Text style={{color:'white'}} > main page</Text>
</TouchableHighlight>
</Right>
</ListItem>
<ListItem >
<Right>
<TouchableHighlight >
<Text style={{color:'white'}} > secnd page</Text>
</TouchableHighlight>
</Right>
</ListItem>
</List>
</View>
)
};
}
NativeBase provides help to include Drawer in our apps
Check NativeBase Drawer
i got the solution i m using NativeBase for ui things so touchable is not work in native listItems so i used button of native BAse like this
<ListItem Button onPress={() => this.asad(this.props) } >
<Right>
<Text style={{color:'white'}} > page</Text>
</Right>
</ListItem>

How to use TouchableNativeFeedback in React native android?

I am getting warnings while using this component. Trying to use this component as a button. I tried require('TouchableNativeFeedback') but no use. I also tried to npm install TouchableNativeFeedback, but failed. How should it be incorporated in my react native android code?
{
var TouchableNativeFeedback= require('TouchableNativeFeedback');
var Button= require('react-native-button');
var {
AppRegistry,
StyleSheet,
Text,
View,
Image,
TouchableNativeFeedback,
} = React;
var AwesomeProject = React.createClass({
render: function() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
My first App
</Text>
<Text style={styles.instructions}>
we should get started
</Text>
<Text style={styles.instructions}>
Nice!!
</Text>
<Image source={require('./abc.png')} style={styles.img} >
<Text style={styles.welcome}> Inside an image! </Text>
</Image>
<TouchableNativeFeedback
style={styles.img} >
<View>
<Text style= {styles.instructions}>
Button!
</Text>
</View>
</ TouchableNativeFeedback>
<Button style={styles.img} onClick="this.butclick">
<View>
<Text style={styles.instructions}>
This is a Button
</Text>
</View>
</Button>
</View>
);
}
});
}
It can be implement like this, see the react-native documentation for more functionality.
​ <TouchableNativeFeedback
background={TouchableNativeFeedback.Ripple('red')}>
<View style={styles.view}>
<Text style={style.text}>Text Here</Text>
</View>
</TouchableNativeFeedback>
best practice to use TouchableNativeFeedback.Ripple is to check the api version of devices first, because this background type is available on Android API level 21+.
import { Platform } from 'react-native';
<TouchableNativeFeedback
onPress={this.follow}
background={
Platform.Version >= 21 ?
TouchableNativeFeedback.Ripple('rgba(0,0,0,.2)', true) :
TouchableNativeFeedback.SelectableBackground()
}
>
require isn't necessary.
TouchableNativeFeedback is like Text, Image or View.
var Button= require('react-native-button');
var {
AppRegistry,
StyleSheet,
Text,
View,
Image,
TouchableNativeFeedback,
} = React;
var AwesomeProject = React.createClass({
render: function() {
return (
<View style={styles.container}>
<TouchableNativeFeedback
style={styles.img} >
<View>
<Text style= {styles.instructions}>
Button!
</Text>
</View>
</ TouchableNativeFeedback>
</View>
);
}
});
Firstly, you need to import the respective dependency(TouchableNativeFeedback):
import { TouchableNativeFeedback, View, Text } from 'react-native';
After this, you can use it as:
<TouchableNativeFeedback onPress={() => this._onPressButton()} key={index}>
<View>
<Text>Click Me</Text>
</View>
</TouchableNativeFeedback>
Note: Make sure to add the respective click function(this._onPressButton()) in your code, otherwise you will get an error.