Reactjs 我一直在犯这个错误。TypeError:附加项不是函数。(在';附加项(文本)';中,';附加项';是对象的实例)

Reactjs 我一直在犯这个错误。TypeError:附加项不是函数。(在';附加项(文本)';中,';附加项';是对象的实例),reactjs,react-native,Reactjs,React Native,这是我每次尝试向列表中添加内容时都会遇到的错误 TypeError:附加项不是函数。(在“addItems(text)”中,“addItems”是Object的实例) 我不知道我做错了什么。我是新来的,所以任何帮助都将不胜感激 这是我的App.js import React, { useState } from 'react'; import { View, Text, StyleSheet, ImageBackground, FlatList } from 'react-native'; im

这是我每次尝试向列表中添加内容时都会遇到的错误

TypeError:附加项不是函数。(在“addItems(text)”中,“addItems”是Object的实例)

我不知道我做错了什么。我是新来的,所以任何帮助都将不胜感激

这是我的App.js

import React, { useState } from 'react';
import { View, Text, StyleSheet, ImageBackground, FlatList } from 'react-native';
import 'react-native-get-random-values';
import { v4 as uuidv4 } from 'uuid';
import { uuid } from 'uuidv4';




import Header from './Componets/Header';
import AddItem from './Componets/AddItem';
import background from './Images/sunrise-in-the-smoky-mountains.jpg';
import ListItem from './Componets/ListItem';



const App = () => {



  const [item, setItems] = useState([
    // {
    //   id: uuidv4(),
    //   name: ''
    // },
    {
      id: uuidv4(),
      name: "gym"
    },
    {
      id: uuidv4(),
      name: "study"
    }
  ]);

  const addItems = (text) => {
    setItems(prevItems => {
      return [{ id: uuidv4(), text }, ...prevItems]
    })
  }

  const deleteItem = (id) => {
    setItems(prevVal => {
      return prevVal.filter(item => item.id != id)
    })
  }



  return (
    <View style={styles.container}>
      <ImageBackground source={background} style={styles.image}>
        <Header
          title="Gotta get this done!" />
        <AddItem
          addItem={addItems}
        />
        <FlatList
          data={item}
          renderItem={({ item }) => (
            <ListItem item={item.name} deleteItem={deleteItem} />
          )}
        />

      </ImageBackground>
    </View>
  )
};



const styles = StyleSheet.create({
  container: {
    flex: 1,

  },
  image: {
    flex: 1,
    resizeMode: "cover",
    justifyContent: "center"
  }
})

export default App;
import React,{useState}来自“React”;
从“react native”导入{View,Text,StyleSheet,ImageBackground,FlatList};
导入“获取随机值”;
从“uuid”导入{v4作为uuidv4};
从“uuidv4”导入{uuid};
从“./Componets/Header”导入标头;
从“./Componets/AddItem”导入附加项;
从“/Images/sunrise in the smoky mountains.jpg”导入背景;
从“./Componets/ListItem”导入ListItem;
常量应用=()=>{
const[item,setItems]=useState([
// {
//id:uuidv4(),
//名称:“”
// },
{
id:uuidv4(),
名称:“健身房”
},
{
id:uuidv4(),
名称:“研究”
}
]);
常量附加项=(文本)=>{
setItems(PreviItems=>{
返回[{id:uuidv4(),text},…previitems]
})
}
常量deleteItem=(id)=>{
setItems(prevVal=>{
返回prevVal.filter(item=>item.id!=id)
})
}
返回(
(
)}
/>
)
};
const styles=StyleSheet.create({
容器:{
弹性:1,
},
图片:{
弹性:1,
resizeMode:“封面”,
为内容辩护:“中心”
}
})
导出默认应用程序;
这里是我调用函数并得到错误的地方

import React, { useState } from 'react';
import { View, Text, StyleSheet, TextInput, TouchableOpacity, Button } from 'react-native';



const AddItem = ( addItems ) => {

    const [text, setText] = useState("");

    const onChange = (inputVal) => setText(inputVal);



    return (
        <View style={styles.addItemView}>
            <TextInput
                style={styles.inputText}
                placeholder="Add item to list..."
                onChangeText={onChange}

                />
            <TouchableOpacity style={styles.button}>
                <Button title="Add Item" onPress={() => addItems(text)}  />

            </TouchableOpacity>
        </View>

);



};

const styles = StyleSheet.create({
    addItemView: {
        flex: 1,
        flexDirection: "row",
        alignItems: 'center'
    },
    inputText: {
        fontSize: 20,
        backgroundColor: "white",
        alignItems: 'center',
        justifyContent: 'center',
        borderWidth: 1,
        width: 250,
    },
    button: {
        alignItems: "center",
        justifyContent: "center",
        height: 40,
        backgroundColor: "#bbc7ad",
        borderRadius: 10,
        borderWidth: 2,
        borderColor: "#99a191",
        marginLeft: 20,
    }
})

export default AddItem;
import React,{useState}来自“React”;
从“react native”导入{View,Text,StyleSheet,TextInput,TouchableOpacity,Button};
常量附加项=(附加项)=>{
const[text,setText]=useState(“”);
const onChange=(inputVal)=>setText(inputVal);
返回(
附加项(文本)}/>
);
};
const styles=StyleSheet.create({
addItemView:{
弹性:1,
flexDirection:“行”,
对齐项目:“中心”
},
输入文本:{
尺寸:20,
背景颜色:“白色”,
对齐项目:“居中”,
为内容辩护:“中心”,
边框宽度:1,
宽度:250,
},
按钮:{
对齐项目:“中心”,
辩护内容:“中心”,
身高:40,
背景颜色:“bbc7ad”,
边界半径:10,
边界宽度:2,
边框颜色:#99a191“,
marginLeft:20,
}
})
导出默认附加项;

您正在将附加项函数作为道具传递到

<AddItem
   addItem={addItems}
 />

当您将任何功能或值传递给React中的任何功能组件时,您只能通过道具访问它们,因此要访问附加项,您需要从道具访问此功能

你可以通过以下方法来实现

方法1

const AddItem = ( props ) => {

   // We are extracting addItem function from props 

    const {addItem} = props

    const [text, setText] = useState("");

    const onChange = (inputVal) => setText(inputVal);



    return (
        <View style={styles.addItemView}>
            <TextInput
                style={styles.inputText}
                placeholder="Add item to list..."
                onChangeText={onChange}

                />
            <TouchableOpacity style={styles.button}>
                <Button title="Add Item" onPress={() => addItem(text)}  />

            </TouchableOpacity>
        </View>

);



};
const AddItem=(道具)=>{
//我们正在从props中提取addItem函数
常量{addItem}=props
const[text,setText]=useState(“”);
const onChange=(inputVal)=>setText(inputVal);
返回(
附加项(文本)}/>
);
};
方法2:

const AddItem = ({addItem} ) => {
      .....
        return (
            <View style={styles.addItemView}>
              ......
                <TouchableOpacity style={styles.button}>
                    <Button title="Add Item" onPress={() => addItem(text)}  />

                </TouchableOpacity>
            </View>

    );



    };
const AddItem=({AddItem})=>{
.....
返回(
......
附加项(文本)}/>
);
};

这似乎暂时有效。仍然不清楚为什么在我的原始版本中使用解构不起作用。如果你能帮忙的话,请插话。谢谢

const AddItem = (props) => {

    const [text, setText] = useState("");

    const onChange = inputVal => setText(inputVal);



    return (
        <View style={styles.addItemView}>
            <TextInput
                style={styles.inputText}
                placeholder="Add item to list..."
                onChangeText={onChange}

            />
            <TouchableOpacity style={styles.button}>
                <Button title="Add Item" onPress={() => props.addItem(text)} />

            </TouchableOpacity>
        </View>

    );



};
const AddItem=(道具)=>{
const[text,setText]=useState(“”);
const onChange=inputVal=>setText(inputVal);
返回(
props.addItem(文本)}/>
);
};

所以我传入了props,并调用了props.addItem,这很有效。但是当它呈现时,它不会呈现新项目的任何文本。它只是呈现一个空的ListItem。我在原始版本中只传递附加项的原因是使用了解构。而不是道具。addItem我只是使用addItems。我觉得应该行