救救孩子吧, React 函数父子组件数据更新流程没有搞明白

2020-12-11 16:27:45 +08:00
 qwertty01

function App() {
    const [data, setData] = useState([])
    const [sqlType, setSqlType] = useState("ALL")

    useEffect(() => {
        axios.get(updateSql_findAll, {
            params: {
                actualSqlType: sqlType
            }
        }).then(response => {
            console.log(response.data[0].second)
            setData(() => {
                return response.data
            })
        })
    }, [sqlType])

    const onSqlTypeSelect = (event) => {
        setSqlType(event.target.value)
    }

    return (
        <div>
            <select onChange={(event => onSqlTypeSelect(event))}

                    style={{width: "200px"}}>
                <option value={"ALL"}>ALL</option>
                <option value={"SELECT"}>SELECT</option>
            </select>
            <Test data={data[0]}/>
        </div>
    )
}

const Test = (props) => {
    console.log(props.data.second)
    return (<div>
        Test
    </div>)
}

我想的更新流程是,我选择 Sql 类型,useEffect 调用,data 数据变化,重渲染子组件 然而实际的流程是,我选择 Sql 类型,重新渲染了子组件,useEffect 调用,data 数据变化,子组件没有进行渲染

839 次点击
所在节点    问与答
1 条回复
qwertty01
2020-12-11 16:38:43 +08:00
```
function App() {
const [data, setData] = useState([])
const [sqlType, setSqlType] = useState("ALL")

useEffect(() => {
axios.get(updateSql_findAll).then(response => {
console.log("use effect 调用")
setData(() => {
return response.data
})
})
}, [sqlType])

const onSqlTypeSelect = (event) => {
setSqlType(event.target.value)
}

return (
<div>
<select onChange={(event => onSqlTypeSelect(event))}

style={{width: "200px"}}>
<option value={"ALL"}>ALL</option>
<option value={"SELECT"}>SELECT</option>
</select>
<Test/>
</div>
)
}

const Test = () => {
console.log("Test 渲染调用")
return (<div>
Test
</div>)
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/734565

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX